我在 DataTemplate
中有一个用户控件, Style
的 TextBlock
不会更改 FontSize
,但会更改 Background
。
附上 sample :
UserControl1
<Window.Resources>
<Style TargetType="{x:Type TextBlock}"
x:Key="TextBlockStyleFontAndBackgound">
<Setter Property="FontSize"
Value="20" />
<Setter Property="Background"
Value="Blue" />
</Style>
<DataTemplate x:Key="contentTemplate">
<StackPanel>
<m:UserControl1 />
</StackPanel>
</DataTemplate>
</Window.Resources>
<Grid>
<ContentControl FontSize="10">
<StackPanel x:Name="stackPanel">
<Button Click="Button_Click" />
<ContentControl ContentTemplate="{StaticResource contentTemplate}" />
<!--<m:UserControl1 />-->
</StackPanel>
</ContentControl>
</Grid>
<UserControl.Resources>
<DataTemplate x:Key="contentTemplateInsideUserControl">
<TextBlock Name="textBlockInResourse" Text="textBlockInsideUserControlResource"
Style="{DynamicResource TextBlockStyleFontAndBackgound}"/>
</DataTemplate>
</UserControl.Resources>
<Grid>
<StackPanel>
<ContentControl ContentTemplate="{StaticResource contentTemplateInsideUserControl}" />
<Button Content="St" Click="Button_Click" />
<TextBlock Name="textBlockInControl" Text="textBlockInsideUserControl"
Style="{DynamicResource TextBlockStyleFontAndBackgound}" />
</StackPanel>
</Grid>
我们有 2 个文本块,背景颜色相同,蓝色,但字体大小不同。
textBlockInResourse FontSize = 20
,取自 TextBlockStyleFontAndBackgound
样式textBlockInControl FontSize = 10
,继承值,为什么会发生?我在用户控件中添加了一个句柄:
private void Button_Click(object sender, RoutedEventArgs e)
{
Style style = FindResource("TextBlockStyleFontAndBackgound") as Style;
textBlockInControl.Style = null;
textBlockInControl.Style = style;
}
现在
Font
设置为样式 TextBlockStyleFontAndBackgound
,其大小为 20为什么现在
FontSize
取自 TextBlockStyleFontAndBackgound
样式。谢谢,
巴拉克
最佳答案
这是你在那里发现的一个非常奇特的问题。我不确定为什么 FontSize
不在 DataTemplate
中时不受影响……查看 MSDN 上的两个属性描述和备注,它们之间的唯一区别是 TextBlock.FontSize
也是 AttachedProperty
,但我看不出如何那会影响任何事情。
但是,如果您仍然感兴趣,我可以提供解决问题的方法。尝试在您的 Style
文件中声明您的 App.xaml
:
<Application.Resources>
<Style TargetType="{x:Type TextBlock}" x:Key="TextBlockStyleFontAndBackgound">
<Setter Property="FontSize" Value="20" />
<Setter Property="Background" Value="Blue" />
</Style>
</Application.Resources>
然后使用
TextBlock
在您的 UserControl
中声明您的 StaticResource
,如下所示:<TextBlock Text="text" Style="{StaticResource TextBlockStyleFontAndBackgound}" />
关于wpf - DataTemplate 中的 UserControl 未应用字体样式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5041629/