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>
Это должно работать.