我已经为设置字体大小和前景颜色的TextBlock定义了一个命名样式,并在用户控件中定义了几个使用此样式的textblock实例。虽然始终应用样式的FontSize设置,但只有在显式设置文本块的FontWeight属性时才应用Foreground设置。
下面是XAML:
请注意,Style和TextBlock实际上不在同一个文件中,而是在同一个程序集中。文本块以22大小呈现,但前景为黑色。
<Style x:Key="StandardTextBlockStyle" TargetType="TextBlock">
<Setter Property="FontSize" Value="22" />
<Setter Property="Foreground" Value="#FF999999"/>
</Style>
<TextBlock Text="Test."
Style="{DynamicResource StandardTextBlockStyle}"
VerticalAlignment="Top"
Margin="0,5,3,0"
Grid.Column="0"
Grid.Row="0" />如果我显式地设置了文本块的FontWeight属性(不管是哪个值),将应用样式的前景设置:
<TextBlock Text="Test."
Style="{DynamicResource StandardTextBlockStyle}"
VerticalAlignment="Top"
FontWeight="Regular"
Margin="0,5,3,0"
Grid.Column="0"
Grid.Row="0" />我的程序的main方法基本上看起来像这样:
[STAThread]
public static void Main()
{
Application app = new Application();
Window w = new TestWindow();
var resource = (ResourceDictionary)Application.LoadComponent(new Uri("/TestProg.UIL;component/SkinBright.xaml", UriKind.RelativeOrAbsolute));
app.Resources.MergedDictionaries.Add(resource);
app.Run(w);
}SkinBright.xaml是包含上面提到的StandardTextBlockStyle的资源字典。
你知道为什么会发生这种情况吗?如何避免在所有文本块上设置字体粗细?
发布于 2011-10-12 15:52:53
我试过你的代码,它可以工作(编辑.NET4.0)
<Grid>
<Grid.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary1.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Grid.Resources>
<TextBlock Text="Lorem Ipsum"
Style="{DynamicResource StandardTextBlockStyle}"/>
</Grid>发布于 2011-10-12 16:49:41
尝试:
<Style x:Key="StandardTextBlockStyle" TargetType="TextBlock" BasedOn="{StaticResource {x:Type TextBlock}}">https://stackoverflow.com/questions/7736439
复制相似问题