我在DataTemplate
中拥有用户控件,Style
的{{1}}不会更改TextBlock
,但会更改FontSize
。
附上样本:
创建一个WPF窗口。
创建用户控件Background
在窗口内粘贴以下代码:
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>
我们有2个文本块,背景颜色相同,蓝色,但字体大小不同。
<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>
,取自样式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
,其大小为20
为什么现在TextBlockStyleFontAndBackgound
取自样式FontSize
。
谢谢, 巴拉
答案 0 :(得分:1)
这是你在那里发现的一个非常特殊的问题。我不确定为什么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}" />