DataTemplate中的UserControl不应用字体样式

时间:2011-02-18 13:07:20

标签: wpf user-controls resources datatemplate styles

我在DataTemplate中拥有用户控件,Style的{​​{1}}不会更改TextBlock,但会更改FontSize

附上样本:

  1. 创建一个WPF窗口。

  2. 创建用户控件Background

  3. 在窗口内粘贴以下代码:

    UserControl1
  4. 在用户控件中粘贴以下代码:

    <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>
    
  5. 我们有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

    谢谢, 巴拉

1 个答案:

答案 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>

然后使用TextBlockUserControl中声明您的StaticResource,如下所示:

<TextBlock Text="text" Style="{StaticResource TextBlockStyleFontAndBackgound}" />