Code Behind для стиля в WPF

24.02.2014 at 19:29

Часто возникает ситуация, когда нужно добавить обработчик через стиль или шаблон. Для этого нужно объявить partial класс для словаря ресурсов, в котором находится стиль. В этом классе и будут обработчики. Сделать это очень просто. Сначала создадим словарь ресурсов, в котором укажем класс с помощью атрибута «x:Class»:

<ResourceDictionary x:Class="TestApplication.MyDictionary" 
                    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Style TargetType="{x:Type Button}" x:Key="ButtonStyle">
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type Button}">
          <Border BorderThickness="1" BorderBrush="Black">
            <Label Content="{TemplateBinding Content}" Margin="10" 
                   MouseEnter="MouseEnterHandler" 
                   MouseLeave="MouseLeaveHandler" />
          </Border>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
</ResourceDictionary>

Здесь переопределен шаблон для кнопки. Интересны нам сейчас обработчики MouseEnterHandler и MouseLeaveHandler. Сейчас при компиляции будет ошибка. Добавляем класс с обработчиками:

namespace TestApplication
{
  public partial class MyDictionary
  {
    private void MouseEnterHandler(object sender, MouseEventArgs e)
    {
      ((Label)sender).Foreground = Brushes.Red;
    }

    private void MouseLeaveHandler(object sender, MouseEventArgs e)
    {
      ((Label)sender).Foreground = Brushes.Black;
    }
  }
}

Здесь важно, чтобы полное имя класса совпадало с тем, что мы указали в «x:Class».
Все, можно подключать словарь и пользоваться стилем.

Tags: