Silverlight 4'ü kullanma & WPF 4, düğmenin fareyle üzerine gelindiğinde, içerilen herhangi bir metnin metin rengini değiştiren bir düğme stili oluşturmaya çalışıyorum. Hem Silverlight & WPF ile bu uyumlu hale getirmek için çalışıyorum, ben görsel devlet yöneticisini kullanıyorum: Bu normal bir eski düğme için bir şablon olduğu içinBir düğmenin denetim şablonunda, içerilen metnin rengini nasıl ayarlayabilirim?
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="outerBorder" CornerRadius="4" BorderThickness="1" BorderBrush="#FF757679">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation Duration="0" To="#FFFEFEFE"
Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"
Storyboard.TargetName="contentPresenter"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid>
<Border x:Name="Background" CornerRadius="3" BorderThickness="1" BorderBrush="Transparent">
<Grid>
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}"/>
</Grid>
</Border>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
, ben hiçbir olduğunu biliyorum İçinde bir metin bloğu bile olduğunu garanti ettim ve ilk başta bunun mümkün olduğundan emin değildim. düğme gibi beyan edilmiş olması halinde
<Button Content="Hello, World!" />
ama değil değişikliği yapar:: İlginç, değişikliği yapar metin rengi düğmesi gibi beyan edilmiş olması halinde
<Button>
<TextBlock Text="Hello, World!" /> <!-- Same result with <TextBlock>Hello, World </TextBlock> -->
</Button>
rağmen görsel ağacı (snoop içinde incelenirken aynıdır (Button -> ContentPresenter -> TextBlock), 1. sürümde oluşturulan metin bloğunun veri bağlamının "Merhaba, Dünya" olarak ayarlanmış olmasına karşın, ikinci sürümdeki metin bloğunun yalnızca metin özellik kümesi. Bunun, kontrol oluşturma sırasına göre bir şeyler yapabileceğini sanıyorum (ilk düğme, TextBlock'u yaratır, ikinci versiyonda metin bloğu ilk olarak oluşturulabilir? Bu konuda gerçekten emin değilim).
Bu araştırmayı yaparken, Silverlight'ta (ContentPresenter'ı ContentControl ile değiştirmek gibi) çalışan bazı çözümler gördüm, ancak bu WPF'de çalışmayacaktır (program çöküyor).
Bu, düğmenin denetim şablonunda olduğundan ve eğer mümkünse VSM'yi kullanmak istediğime göre, aynı zamanda, Button'un kendi Foreground özelliğini açıkça değiştirmeyi de göz önünde bulundurduğumu düşünüyorum (buna nasıl erişeceğimi bilmiyorum şablon içinde?)
Herhangi bir yardım için minnettar olurum, kimsenin verebileceği tavsiyesi.
TextElement'in TextBlock ile hiçbir ilgisi olmadığını düşündüğümde işe yaradığına şaşırdım. – Denis