Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有自定义控件的简单WPF事件问题_C#_Wpf_Events - Fatal编程技术网

C# 带有自定义控件的简单WPF事件问题

C# 带有自定义控件的简单WPF事件问题,c#,wpf,events,C#,Wpf,Events,我正在制作一个名为“ShardButton”的自定义按钮,它使用一种样式来控制其内容及其事件触发器: <Style x:Key="ButtonStyle" TargetType="{x:Type obj:ShardButton}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type obj:Sha

我正在制作一个名为“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中做到这一点

我似乎找不到正确的方式来形容谷歌搜索

谢谢你能给我的任何帮助


标记

您不能直接在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的可视树中的某个位置,这可能就是这种情况(或者样式将在其他位置定义)。

您不能直接在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的可视树中的某个位置,这可能就是这种情况(或者样式将在其他位置定义)。

您可以在
样式中使用
事件设置器

<Style ...>
    <EventSetter Event="Click" Handler="yourHandlerMethod"/>
</Style>

您可以在
样式中使用
事件设置器

<Style ...>
    <EventSetter Event="Click" Handler="yourHandlerMethod"/>
</Style>

谢谢因此,MyCommand返回了一个ICommand实现,但是如何返回单击按钮的OnClick方法呢?我不确定是否正确理解了您的评论。如果你在ShardButton上直接覆盖OnClick(每个按钮通用的命令),你不必使用任何命令,这是第二种情况(特定于样式的命令)。啊,我明白你的意思了,我错过了你的帖子。谢谢你的澄清,谢谢!因此,MyCommand返回了一个ICommand实现,但是如何返回单击按钮的OnClick方法呢?我不确定是否正确理解了您的评论。如果你在ShardButton上直接覆盖OnClick(每个按钮通用的命令),你不必使用任何命令,这是第二种情况(特定于样式的命令)。啊,我明白你的意思了,我错过了你的帖子。谢谢你的澄清。嗨,肯特,问题是我需要在另一个类中使用该方法,在本例中是ShardButton,它扩展了Button。嗨,肯特,问题是我需要在另一个类中使用该方法,在本例中是ShardButton,它扩展了Button。