none
Игнорирование свойств стилей WPF из примера не работает RRS feed

  • Вопрос

  • Здравствуйте!

    Разбираюсь с WPF по книге Мэтью Мак-Дональда. Там есть такой пример стиля:

    <Style x:Key="BigFontButtonStyle">
          <Setter Property="Control.FontFamily" Value="Times New Roman" />
          <Setter Property="Control.FontSize" Value="18" />
          <Setter Property="Control.FontWeight" Value="Bold" />
    </Style>

    И код, отображающий панель:

    <StackPanel Margin="5">
        <Button Padding="5" Margin="5"
                Style="{StaticResource BigFontButtonStyle}" 
                  >A Customized Button</Button>
        <TextBlock Margin="5" >Normal Content.</TextBlock>
        <Button Padding="5" Margin="5"
                >A Normal Button</Button>
        <TextBlock Margin="5">More normal Content.</TextBlock>
            <Label
                Style="{StaticResource BigFontButtonStyle}"
                >This is a label</Label>
        <Button Padding="5" Margin="5"
                Style="{StaticResource BigFontButtonStyle}" 
                  >Another Customized Button</Button>
      </StackPanel>

    Если назначить этот стиль к элементам Button и Label все срабатывает. Здесь вопросов нет, так как оба класса унаследованы от Control. Однако, далее пример модифицируется (изменения выделены жирным шрифтом):

    <Style x:Key="BigFontButtonStyle">
          <Setter Property="Button.FontFamily" Value="Times New Roman" />
          <Setter Property="Button.FontSize" Value="18" />
          <Setter Property="Button.FontWeight" Value="Bold" />
    </Style>

    И говорится, что после этой модификации элемент Label не будет выглядеть в этом стиле (хотя указание стиля в исходном тексте сохранено). Цитирую: "...Инфраструктура WPF просто игнорирует эти три свойства, поскольку к Label они не применимы...". Но у меня модификация примера не приводит к ожидаемому результату - и кнопку и (главное) метки по-прежнему отображаются жирным шрифтом 18 размера.

    Что не так?!

    Спасибо.


    9 ноября 2015 г. 22:50

Ответы

  • Если эта цитата верно понята вами в контексте, то скорее всего в последних версиях WPF это поведение изменено на то что мы имеем. В принципе это логично, так как указанные свойства унаследованы из одного и того-же класса что в Button, что в Label.

    Есть еще вариант, что вы не верно поняли написанное и речь там вот о чем:

            <Style x:Key="BigFontButtonStyle">
                <Setter Property="Control.FontFamily" Value="Times New Roman" />
                <Setter Property="Control.FontSize" Value="18" />
                <Setter Property="Control.FontWeight" Value="Bold" />
                <Setter Property="Button.ClickMode" Value="Press" />
            </Style>
    Как вы понимаете у Label нет свойства ClickMode, но прямое указание на Button позволяет избежать ошибки, так как "...Инфраструктура WPF просто игнорирует это свойство, поскольку к Label оно не применимы..."


    VB.Net - WPF, UWP

    10 ноября 2015 г. 7:03
    Отвечающий