我有这个ResourceDictionary
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="MainMenuLabelStyle" TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property ="IsMouseOver" Value="True">
<Setter Property= "Foreground" Value="White"/>
<Setter Property= "FontSize" Value="18"/>
<Setter Property= "FontFamily" Value="Arial"/>
</Trigger>
</Style.Triggers>
</Style>
如果我想更改字体大小或颜色,我该怎么办?这段代码不起作用。
Application.Current.Resources("MainMenuLabelStyle") = 25
这是xaml
<TextBlock Text="Uscita" Grid.Row="1" Grid.Column="1" TextAlignment="Left" Margin="4" TextWrapping="Wrap" Style="{DynamicResource MainMenuLabelStyle}">
答案 0 :(得分:0)
在您的代码中:
Application.Current.Resources("MainMenuLabelStyle") = 25
1)语法错误。 Application.Current.Resources["MainMenuLabelStyle"]
2)Application.Current.Resources["MainMenuLabelStyle"]
此代码将返回类型为Style
的对象,而不是样式属性Font Size
。
您可以创建新的Style
并将其替换为ResourceDictionary。
答案 1 :(得分:0)
在WPF应用程序中第一次使用样式之前,由于性能原因而将其密封,因此无法再对其进行修改。您可以在MSDN上阅读。
所以,如果你想改变你的风格,你必须选择。第一个(最简单的一个)是根据需要声明多个样式并将它们放在ResourceDictionary
中。
第二种解决方案是考虑Setter
是DependencyObject
,因此您可以绑定其依赖项属性。在这种情况下,您的风格将变为:
<Style x:Key="MainMenuLabelStyle" TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Tag.Foreground, TargetNullValue=Red, FallbackValue=Red}" />
<Setter Property="FontSize" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Tag.FontSize, TargetNullValue=18, FallbackValue=18}" />
<Setter Property="FontFamily" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Tag.FontFamily, TargetNullValue=Arial, FallbackValue=Arial}" />
</Trigger>
</Style.Triggers>
</Style>
现在,您只需设置每个Tag
控件的TextBlock
属性即可更改样式:
<StackPanel>
<TextBlock Text="Uscita" TextAlignment="Left" Margin="4" TextWrapping="Wrap" Style="{DynamicResource MainMenuLabelStyle}" />
<TextBlock Text="Uscita" TextAlignment="Left" Margin="4" TextWrapping="Wrap" Style="{DynamicResource MainMenuLabelStyle}">
<TextBlock.Tag>
<local:StyleConfig FontSize="50" FontFamily="Tahoma" Foreground="Orange" />
</TextBlock.Tag>
</TextBlock>
</StackPanel>
正如您所看到的,第一个TextBlock
将使用声明的样式。另一方面,第二个TextBlock
将使用原始样式的修改版本。
当然,为了使此选项正常工作,您必须在我的示例中创建一个类(StyleConfig
),这可能是这样的:
public class StyleConfig
{
public string Foreground { get; set; }
public string FontSize { get; set; }
public string FontFamily { get; set; }
}
我希望它可以帮到你。