gpt4 book ai didi

c# - 如何获取 Generic.Xaml 中自定义控件的事件处理程序

转载 作者:行者123 更新时间:2023-12-03 03:18:02 30 4
gpt4 key购买 nike

我正在尝试创建一个带有两个按钮的自定义控件(例如)。我有一个 Generic.Xaml 文件,如下所示

<Style TargetType="local:DoubleButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:DoubleButton">
<Grid>

<Button x:Name="leftButton" Click="leftButtonClick" />

<Button x:Name="rightButton" />

</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

DoubleButton 类如下所示:

public sealed class DoubleButton : Control
{
public DoubleButton()
{
this.DefaultStyleKey = typeof(DoubleButton);
}

public void leftButtonClick(object sender, RoutedEventArgs e)
{
MessageDialog dlg = new MessageDialog("message");
}
}

但是这个方法永远不会被调用。如果有人知道如何引发自定义控件的事件,那就太好了。

谢谢

最佳答案

如果给定的控件有一个事件处理程序,您可以像这样设置它......

            <Grid>
<Button x:Name="PART_leftButton" />
<Button x:Name="PART_rightButton" />
</Grid>

名称的第一部分以 PART_ 开头

控件的隐藏代码如下所示...

[TemplatePart(Name = "PART_leftButton", Type = typeof(Button))]
public class CustomControl1 : Control
{
static CustomControl1()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
var button = Template.FindName("PART_leftButton", this) as Button;
if (button != null)
{
button.Click += (s, a) => Console.WriteLine(@"click");
}
}
}

...应用控件模板时添加事件处理程序。请注意类定义中的属性“TemplatePartAttribute”。

忽略此属性不会使您的程序崩溃或执行任何不同的操作。这是对那些稍后可能会阅读您的代码的人的专业礼貌。它被 Blend 和其他表面设计者使用。这是一个非常有帮助的约定。

关于c# - 如何获取 Generic.Xaml 中自定义控件的事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23610581/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com