我有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的方法吗?
答案 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}}
这应该有效。