WPF:如何将一个用户控件用于多个不同的Click事件 [英] WPF: How do I use one User control for multiple different Click events

查看:78
本文介绍了WPF:如何将一个用户控件用于多个不同的Click事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为主页上的所有按钮创建一个User控件,每个用户控件应具有不同的Click事件.我正在尝试通过向User控件添加一个属性(适用于标签和图像)来解决此问题,但是找不到Click事件的任何解决方案.

I'm trying to create a User control for all the buttons on my homepage, every user control should have a different Click event. I'm trying to solve this by adding a property to the User control (which works for the label and image) but i can't find any solution for the Click event.

ImageLabelButton.xaml:

ImageLabelButton.xaml:

<UserControl x:Class="SC.UI.WPF.Controls.ImageLabelButton"
<Grid>
    <Button Name="BtnClick">
        <StackPanel>
                <Image Name="ImageButton"/>
                <Label Name="LabelButton"/>
        </StackPanel>
    </Button>
</Grid>

ImageLabelButton.xaml.cs:

ImageLabelButton.xaml.cs:

....
  <!-- works -->
  public string Name
  {
      get { return this.LabelButton.Content.ToString(); }
      set { this.LabelButton.Content = value; }
  }
  <!-- works -->
  public ImageSource SetSource
  {
      get { return ImageButton.Source; }
      set { ImageButton.Source = value; }
  }
  <!-- doesn't work -->
  public EventHandler ButtonAction
  {
      get { return BtnClick.Click; }
      set { BtnClick.Click= value; }
  }

Implementation.xaml:

Implementation.xaml:

....
<controls:ImageLabelButton Name="first" SetSource="test.png" ButtonAction="Click1"/>
<controls:ImageLabelButton Name="first" SetSource="test.png" ButtonAction="Click2"/>
<controls:ImageLabelButton Name="first" SetSource="test.png" ButtonAction="Click3"/>

推荐答案

您只需要将事件处理程序设置为用户控件的属性,并在使用代码中进行设置:

You just need to set the event handler up as a property of the user control and set it in the usage code:

用户控件XAML:

<Grid>
    <Button Name="BtnClick" Click="BtnClick_DoClick">
        <StackPanel>
            <Image Name="ImageButton"/>
            <Label Name="LabelButton"/>
        </StackPanel>
    </Button>
</Grid>

后面的用户控制代码:

    public EventHandler<RoutedEventArgs> ButtonAction;

    private void BtnClick_DoClick(object sender, RoutedEventArgs e)
    {
        if (ButtonAction != null) ButtonAction(sender, e);
    }

实施XAML:

<controls:ImageLabelButton Name="first1" SetSource="test.png" />
<controls:ImageLabelButton Name="first2" SetSource="test.png" />
<controls:ImageLabelButton Name="first3" SetSource="test.png" />

后面的实现代码:

    public MainWindow()
    {
        InitializeComponent();

        first1.ButtonAction = Button1;
        first2.ButtonAction = Button2;
        first3.ButtonAction = Button3;
    }

    private void Button3(object sender, RoutedEventArgs e) { MessageBox.Show("Pressed 3"); }
    private void Button2(object sender, RoutedEventArgs e) { MessageBox.Show("Pressed 2"); }
    private void Button1(object sender, RoutedEventArgs e) { MessageBox.Show("Pressed 1"); }

尽管您不能以这种方式在XAML中设置事件处理.

Although you can't set the event handling in XAML this way.

这篇关于WPF:如何将一个用户控件用于多个不同的Click事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆