UserControl в DataTemplate не применяет стиль для шрифта - PullRequest
4 голосов
/ 18 февраля 2011

У меня есть пользовательский элемент управления в DataTemplate, Style из TextBlock не меняет FontSize, но меняет Background.

Прилагаются образцы:

  1. Создание окна WPF.

  2. Создание пользовательского элемента управления, UserControl1

  3. Внутри окна вставьте следующий код:

    <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>
    
  4. В пользовательский элемент управления вставьте следующий код:

    <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.

Спасибо, барак

1 Ответ

1 голос
/ 12 марта 2011

Это очень специфическая проблема, которую вы нашли там.Я не уверен, почему на 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}" />
...