كيف يمكنك تغيير لون النص المميز لWPF مربع نص؟
-
03-07-2019 - |
سؤال
ووTextBox
WPF أصلا يجعل من استخدام اللون تسليط الضوء على نظام لطلاء خلفية النص المحدد. أود أن تجاوز هذا وجعله متسقا لأنه يختلف حسب الموضوع OS / المستخدم.
لListBoxItem
s، هناك <لأ href = "http://blogs.msdn.com/wpfsdk/archive/2007/08/31/specifying-the-selection-color-content-alignment-and-background- اللون مقابل البنود-في-listbox.aspx "يختلط =" نوفولو noreferrer "> أنيق خدعة (انظر أدناه) حيث يمكنك تجاوز مفتاح الموارد لHighlightBrushKey
لتخصيص لون تسليط الضوء على النظام في التركيز إعداد:
<Style TargetType="ListBoxItem">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightGreen"/>
</Style.Resources>
</Style>
ونفس الحيلة لا تعمل للأسف TextBox
. هل لديها أي أفكار أخرى، إلى جانب "تجاوز ControlTemplate
"؟
وشكرا على اي اقتراحات!
المحلول
وكما ذكر ستيف: <لأ href = "http://blogs.msdn.com/b/llobo/archive/2009/10/27/new-wpf-features-caretbrush-selectionbrush.aspx" يختلط = "نوفولو noreferrer "> ملاحظة: يظهر هذا السلوك لتضاف إلى WPF 4.
وأنا اصطدم نفس المشكلة.
وكما يقول Dr.WPF
<اقتباس فقرة>و"من المستحيل تماما في الإصدارات. NET الحالية (3.0 و 3.5 بيتا). وضمني عنصر التحكم إلى استخدام إعدادات النظام ... لم يحدث ذلك ننظر في قالب السيطرة على الإطلاق ".
اقتباس فقرة>HTTP: //social.msdn.microsoft.com/Forums/en-US/wpf/thread/bbffa6e3-2745-4e72-80d0-9cdedeb69f7f/
نصائح أخرى
ومنذ .NET Framework 4، TextBoxBase.SelectionBrush
وعلى سبيل المثال
<TextBox SelectionBrush="Red" SelectionOpacity="0.5"
Foreground="Blue" CaretBrush="Blue">
وهذا هو ويندوز 8.1 صافي 4.6.1 حل اختبار لتخصيص SelectionBrush
كل TextBox
في التطبيق:
/// Constructor in App.xaml.cs
public App() : base()
{
// Register an additional SelectionChanged handler for appwide each TextBox
EventManager.RegisterClassHandler(typeof(TextBox), TextBox.SelectionChangedEvent, RoutedEventHandler(_textBox_selectionChanged));
}
private void _textBox_selectionChanged(object sender, RoutedEventArgs e)
{
// Customize background color of selected text
(sender as TextBox).SelectionBrush = Brushes.MediumOrchid;
// Customize opacity of background color
(sender as TextBox).SelectionOpacity = 0.5;
}
إذا كنت ترغب في تضمين RichTextBox
استبدال اسم نوع TextBox
4 مرات من قبل TextBoxBase
.
ويمكنك إنشاء نمط لمربع نص وكتابة واضعة للخلفية. يجب أن يكون أسلوب مربع نص واحد الافتراضية بحيث أن أي مربع نص والتي تأتي تحت شجرة البصرية سوف تحصل على مربع نص متغير
<Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBox}">
وجرب هذا:
<Trigger Property="IsHighlighted" Value="True">
<Setter TargetName="Border" Property="Background" Value="OrangeRed"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>