[英]Simple WPF event question with custom control
我制作了一个名为“ ShardButton”的自定义按钮,该按钮使用一种样式来控制其内容以及事件触发器:
<Style x:Key="ButtonStyle" TargetType="{x:Type obj:ShardButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type obj:ShardButton}">
<Grid>
<Path .../>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
RecognizesAccessKey="True"/>
</Grid>
<ControlTemplate.Triggers>
<EventTrigger RoutedEvent="ButtonBase.Click">
!!!SOMETHING HERE!!!
</EventTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我在主Window1.xaml文件中使用上述XAML,并为“ obj”命名空间创建了一个xmlns,所以我想做的是在ShardButton类上调用自定义事件处理方法,我该如何在XAML中做到这一点?
我似乎找不到为Google搜索表达其用语的正确方法。
感谢你给与我的帮助!
标记
您不能直接在EventTriggers中执行事件处理程序,因为它们不是为此目的而创建的。
但是,如果您的ShardButton的每个实例都必须在单击时执行相同的操作,则只需覆盖ShardButton类中的OnClick方法,然后执行此处要做的任何事情。
如果您不希望这种行为,而是希望为每个使用Window1.xaml中定义的特定样式的ShardButton实例执行特定的处理程序,请添加另一个设置器:
<Setter Property="Command" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type obj:Window1}}, Path=MyCommand}" />
其中MyCommand是Window1的实例属性,它返回ICommand的自定义实现,该实现将调用您的处理程序。 此行代码假定使用此样式的每个按钮都在Window1的可视树中的某个位置,这可能是这种情况(否则样式将在其他位置定义)。
您可以在自己的Style
使用EventSetter
:
<Style ...>
<EventSetter Event="Click" Handler="yourHandlerMethod"/>
</Style>
然后在您的代码背后:
private void yourHandlerMethod(object sender, RoutedEventArgs e)
{
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.