WPF Установка стиля по умолчанию для TextBlock переопределяет стиль для метки - PullRequest
8 голосов
/ 05 февраля 2010

Установка стиля по умолчанию для TextBlock приводит к настройке стиля в Label и других элементах управления.Это происходит только в том случае, если вы помещаете стили в ресурсы приложения, когда я помещаю стиль в ресурсы окна, все в порядке.

Я также обнаружил, что VS 2008 Designer и XamlPadX отображают метку так, как вы ожидаетено проблема возникает, только если вы выполняете приложение в реальной жизни.

<Application x:Class="WpfApplication.App"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   StartupUri="Window1.xaml">
   <Application.Resources>
       <ResourceDictionary>
           <Style TargetType="TextBlock">
               <Setter Property="FontSize" Value="8"/>
           </Style>

           <Style x:Key="Title" TargetType="Label">
               <Setter Property="FontSize" Value="32"/>
           </Style>
       </ResourceDictionary>
   </Application.Resources>
</Application>

<Window x:Class="WpfApplication.Window1"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       Height="300"
       Title="Window1"
       Width="300">
   <StackPanel>

       <TextBlock Text="TextBlock No Style" Style="{x:Null}"/>
       <Label Content="Label No Style" Style="{x:Null}"/>

       <TextBlock Text="Default TextBlock"/>
       <Label Content="Default Label" Style="{StaticResource Title}"/>

   </StackPanel>
</Window>

Приведенный выше код отображает:

TextBlock No Style - Default font size (As you would expect)
Label No Style - Size 5 font size (How did this happen?)
Default TextBlock - Size 5 font size (As expected by my style)
Default Label - Size 5 font size (How did this happen?)

1 Ответ

11 голосов
/ 05 февраля 2010

Да, этого и следовало ожидать; посмотрите на шаблон по умолчанию для Label, это просто текстовый блок с отступом. Стили унаследованы , поэтому Label установит FontSize на 32, но тогда стиль TextBlock переопределит это. Если бы вы только что это сделали, это тоже было бы 5pt.

Редактировать: Таким образом, я решил бы создать фиктивный подкласс (т.е. класс, который ничего не меняет) из TextBlock с именем NormalText, а затем стилизовать его; таким образом, вы случайно не получите другие текстовые блоки.

...