سؤال

ووTextBox WPF أصلا يجعل من استخدام اللون تسليط الضوء على نظام لطلاء خلفية النص المحدد. أود أن تجاوز هذا وجعله متسقا لأنه يختلف حسب الموضوع OS / المستخدم.

لListBoxItems، هناك <لأ 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

وشكرا على اي اقتراحات!

ملاحظة: هذا يبدو السلوك تضاف إلى WPF 4.

هل كانت مفيدة؟

المحلول

وكما ذكر ستيف: <لأ 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top