我有我的文件Styles.xaml,它们在Application.xaml中合并,所以它适用于所有东西..
这是我的风格
<Style TargetType="{x:Type Control}" x:Key="baseStyle">
<Setter Property="FontFamily" Value="Verdana"/>
<Setter Property="FontSize" Value="12"/>
</Style>
<Style TargetType="Button" BasedOn="{StaticResource baseStyle}">
<Setter Property="Margin" Value="2,0,2,0"/>
<Setter Property="Padding" Value="2"/>
<Setter Property="FontSize" Value="50"/>
</Style>
<Style TargetType="TextBlock">
<Setter Property="FontFamily" Value="Verdana"/>
<Setter Property="FontSize" Value="12"/>
</Style>
当我在编辑器中这似乎有效但是当我运行应用程序时,按钮的字体大小会缩小到正常大小。
我的猜测是,当按钮的内容设置为字符串然后使用文本块样式时,按钮会创建一个TextBlock ..但是如何覆盖它呢?
答案 0 :(得分:8)
你是对的
我的猜测是按钮创建了一个 TextBlock的内容设置为 一个字符串,然后使用文本块 式
。请参阅this帖子。
解决方法是定义一个 DataTemplate for System.String,其中 我们可以明确使用默认值 TextBlock显示内容。您 可以将DataTemplate放在 你定义的相同词典 TextBlock风格使这一点 DataTemplate将应用于 无论ContentPresenter受到什么影响 你的风格。
因此,最后将DataTemplate添加到Styles.xaml将解决问题
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Style TargetType="{x:Type Control}" x:Key="baseStyle">
<Setter Property="FontFamily" Value="Verdana"/>
<Setter Property="FontSize" Value="12"/>
</Style>
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource baseStyle}">
<Setter Property="Margin" Value="2,0,2,0"/>
<Setter Property="Padding" Value="2"/>
<Setter Property="Foreground" Value="Red" />
<Setter Property="FontSize" Value="50"/>
</Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="FontFamily" Value="Verdana"/>
<Setter Property="Foreground" Value="Green" />
<Setter Property="FontSize" Value="24"/>
</Style>
<DataTemplate DataType="{x:Type sys:String}">
<TextBlock Text="{Binding}">
<TextBlock.Resources>
<Style TargetType="{x:Type TextBlock}"/>
</TextBlock.Resources>
</TextBlock>
</DataTemplate>
</ResourceDictionary>
这将保留TextBlock的Style,但是例如在Button中创建的TextBlock不会受其影响
答案 1 :(得分:0)
我试过你的风格,效果很好。所以你的风格不是问题。我认为这是你在写作时合并风格的地方。您最好将ResourceDictionary Styles.xaml放在MainWindow文件中而不是Application.xaml中。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<StackPanel>
<TextBlock>TTT</TextBlock>
<Button>BBB</Button>
</StackPanel>
</Window>
但是您的问题仍然不清楚,如果不是解决方案,您可以通过发布这部分代码来更清楚地说明您使用样式的方式吗?