WPF:如何为样式中定义的按钮分配Click处理程序

时间:2018-07-11 20:59:15

标签: wpf styles eventsetter

我有ListBox,它应该显示字段列表。当为空时,我希望在ListBox中具有一个“添加字段”按钮。因此,我为添加按钮的空盒创建了样式。我需要为按钮的Click事件添加一个处理程序,以创建一个新的Field并将其添加到列表中,因此我使用了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 个答案:

答案 0 :(得分:2)

尝试创建一个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> 。喜欢,

{{1}}

这应该有效。