2010-10-18 18 views
7

Bir ControlTemplate aracılığıyla tanımlanmış bir TextBox var. ControlTemplate nedeniyle, TextBox, IsEnabled özelliği false olarak ayarlandığında otomatik olarak grileştirilmez. BackgroundConcept devre dışı bırakılmış bir TextBox

Bu işlevselliği sağlamak için, ben ControlTemplate Aşağıdaki tetiği kullanın:

<Trigger Property="IsEnabled" Value="False">        
    <Setter Property="Foreground" Value="{x:Static SystemColors.GrayTextBrush}" /> 
</Trigger> 

Bu iyi çalışır. Ancak, aynı zamanda BackgroundColor'u da ayarlamak zorundayım ama SystemColors'da karşılık gelen bir girdi bulamadım. Engelli kontrollerin (TextBoxes) arka planı için hangi giriş doğru girilir? SystemColors'tan başka bir kaynak var mı?

Sabit bir değer kullanmak istemiyorum. Örneğin. Background="#f4f4f4" ayarı, bazı ortamlarda, devre dışı bırakılmış arka planın başka bir değere sahip olduğundan ve kontrolümün gerektiği gibi görünmediğinden veya hatta okunamadığından (örneğin, GrayTextBrush değeri # f4'ün yakınındaysa) endişeleniyorum.

cevap

14

aşağıdaki StackOverflow soru yardımcı olabilir:

Visual guide to System.Windows.SystemColors

Düzenleme:

bazı ek sleuthing yaptım ve Microsoft sağlayan standart XAML stilleri (Where can I download Microsoft's standard WPF themes from? bakınız) baktı. Çeşitli denetimler için hangi SystemColors değerlerinin kullanıldığını görebilirsiniz.

<Trigger Property="IsEnabled" Value="false"> 
    ... 
    <Setter 
     TargetName="Bd" 
     Property="Background" 
     Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
    ... 
</Trigger> 

Microsoft engelli ComboBox arka plan rengi ile SystemColors.ControlBrushKey kullanır:

Örneğin, burada ComboBox kontrol şablonunun snippet'idir.

+0

+1 Teşekkürler. İlginç bir yazı, ancak benim soruma cevap bulunamadı. Bir şeyi özledim mi? – HCL

+0

Arka planınız için sabit bir değer kullanmak yerine, bir SystemColors değeri kullanmak ister misiniz? Varsayılan XAML stillerine bakarak, Microsoft'un SystemColors.ControlBrushKey değerini devre dışı bırakılan denetimler için arka plan rengi olarak kullandığı anlaşılmaktadır. Bu renk, SystemColors.GrayTextBrush ile kontrast olmalıdır, böylece kullanıcı, kontrol devre dışı bırakıldığında değeri okuyabilecektir. Mükemmel bir cevap için –

+2

+1. Uygulama çalışırken, kullanıcı Windows temasında rengi değiştirirse uygulama otomatik olarak renk değiştirir, böylece DynamicResource kullanımı dikkat edin. –

0

Win7 aero SystemColors.ControlBrushKey için onaltılık değeri F0F0F0'dir. F4F4F4 değil. Yani bir doğru değil, hangisi olduğunu bilmiyorum, bu yüzden F4F4F4 kullanacağım.

İlgili konular