我正在创建一个名为“ShardButton”的自定义按钮,它使用Style来控制其内容及其事件触发器:
<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搜索的正确方法......
感谢你们给我的任何帮助!
标记
答案 0 :(得分:1)
你不能在EventTriggers中直接执行事件处理程序,它们并没有为此目的而创建。
但是,如果你的ShardButton的每个实例必须在点击时做同样的事情,只需覆盖ShardButton类中的OnClick方法,并做你在这里做的任何事情。
如果您不希望出现此行为,而是希望为使用Window1.xaml中定义的此特定样式的每个ShardButton实例执行特定处理程序,请添加另一个setter:
<Setter Property="Command" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type obj:Window1}}, Path=MyCommand}" />
其中MyCommand是Window1的实例属性,返回将调用您的处理程序的ICommand的自定义实现。这行代码假定使用此样式的每个按钮都在Window1的可视树中的某个位置,这应该是这种情况(或者样式将在其他地方定义)。
答案 1 :(得分:0)
您可以在EventSetter
中使用Style
:
<Style ...>
<EventSetter Event="Click" Handler="yourHandlerMethod"/>
</Style>
然后在您的代码隐藏中:
private void yourHandlerMethod(object sender, RoutedEventArgs e)
{
...
}