我在 DataTemplate 中有一个用户控件, StyleTextBlock 不会更改 FontSize ,但会更改 Background

附上 sample :

  • 创建 WPF 窗口。
  • 创建用户控件,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/

    10-15 06:19