CodeGo.net>如何外部分配事件处理程序的用户控件内的控件?

如果我有一个UserControl

<UserControl
    x:Class="UserInterface.AControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Button
            Content="Set"
            Name="setButton" />
    </Grid>
</UserControl>

使用此控件时,如何在外部为setButton分配事件处理程序?

<UserControl
    xmlns:my="clr-namespace:UserInterface"
    x:Class="UserInterface.AnotherControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <my:AControl />
    </Grid>
</UserControl>

我可以使用类似的东西吗?

        <my:AControl
              setButton.Click="setButton_Click" />

解决方法:

您实际上无法做到这一点,但是您可以在自定义UserControl(AControl)中进行操作,从中公开一个公共事件“ SetButtonClicked”,然后订阅该事件.这假定SetButton存在于AControl上.

例如,用于AControl的C#代码将变为

public class AControl : UserControl
{ 
    public event EventHandler<EventArgs> SetButtonClicked;

    public AControl ()
    {
        InitializeComponent();
        this.setButton.Click += (s,e) => OnSetButtonClicked;
    }
    protected virtual void OnSetButtonClicked()
    {
        var handler = SetButtonClicked;
        if (handler != null)
        {
            handler(this, EventArgs.Empty);
        }
    }
}

在Xaml中,您将按以下方式订阅

<my:AControl SetButtonClick="setbutton_Clicked"/>

编辑:我想问一下这是什么,但是您想要在这里实现.如果您希望处理AControl之外的其他行为,那么可以将该事件称为其他事件吗?例如,您是否只想通知某人某个按钮被单击或操作已完成?通过将自定义行为封装为AControl内部的单击,您可以暴露AControl使用者真正关心的行为.
最好的祝福,

上一篇:我如何创建其他窗口继承的窗口?


下一篇:c#-访问窗口资源内部的命名元素