WPF: как назначить обработчик Click для кнопки, определенной в стиле

У меня есть ListBox, который должен показывать список полей. Когда пусто, я хотел, чтобы внутри ListBox была кнопка "Добавить поле". Итак, я создал стиль для пустого кейса, который добавляет кнопку. Мне нужно было добавить обработчик для события Click для кнопки, чтобы создать новое поле и добавить его в список, поэтому я использовал EventSetter для присоединения обработчика. Вот код, который у меня есть.

<ListBox.Style>
  <Style TargetType="ListBox" BasedOn="{StaticResource {x:Type ListBox}}">
    <Style.Triggers>
      <Trigger Property="HasItems" Value="False">
        <Setter Property="Template">
          <Setter.Value>
            <ControlTemplate>
              <Button Content="Add field" Height="20">
                <Button.Style>
                  <Style TargetType="{x:Type Button}">
                    <EventSetter Event="Click" Handler="AddField_Click" />
                  </Style>
                </Button.Style>
              </Button>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Trigger>
    </Style.Triggers>
  </Style>
</ListBox.Style>

Проблема в том, что при компиляции я получаю следующую ошибку в строке, где находится тег EventSetter:

error MC4007: The event 'Click' cannot be specified on a Target tag in a Style. 
Use an EventSetter instead.

Я в тупике. Я уже использую EventSetter. Как мне решить это? Есть ли какой-то другой способ указать EventSetter, который я должен использовать?

1 ответ

Попробуйте создать Style и назначить это Button, Подобно,

<ListBox>
    <ListBox.Resources>
        <Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
            <EventSetter Event="Button.Click" Handler="AddField_Click" />
        </Style>
    </ListBox.Resources>
    <ListBox.Style>
        <Style TargetType="ListBox" BasedOn="{StaticResource {x:Type ListBox}}">
            <Style.Triggers>
                <Trigger Property="HasItems" Value="False">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <Button Content="Add field" Height="20" 
                                        Style="{StaticResource ButtonStyle}">
                                </Button>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListBox.Style>
</ListBox>

Это должно работать.

Другие вопросы по тегам