繁体   English   中英

如何在WPF用户控件中具有事件

[英]How to have events in WPF user control

我有一个用户控件:

<UserControl x:Class="NeocClinic.WPFSystem.Templatas.FunctionButtonsUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" >
    <Grid Name="GridFunctionButtons" Margin="5" >
        <Grid.ColumnDefinitions >
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <Button Name="btnExecute" Content="Execute" MinHeight="50" MinWidth="120" Grid.Column="0"/>
        <Button Name="btnUndo" Content="Undo" MinHeight="50" MinWidth="120" Grid.Column="1"/>
        <Button Name="btnBack" Content="Back" MinHeight="50" MinWidth="120" Grid.Column="2"/>
        <Button Name="btnDelete" Content="Delete" MinHeight="50" MinWidth="120" Grid.Column="3"/>

    </Grid>
</UserControl>

我在Windows窗体XAML中使用了它:

<windowsControls:FunctionButtonsUserControl x:Name="UserControlFunctionButtons" Grid.Row="5" Grid.Column="0" />

现在,我可以在C#代码中看到按钮,但问题是事件。 这四个按钮必须具有每个事件,但与我部署它的每种形式都不同,因此无法将事件放入usercontrol.xaml中。

您需要在UserControl中具有相同的事件,然后在“窗体”上订阅它们(尽管这不是正确的WPF术语),然后可以从那里引发新事件(如果需要)或调用适当的方法。 。

编辑:要从UserControl引发事件,只需在后面的代码中声明它们即可(稍后根据以下注释更新):

public event RoutedEventHandler MyEvent;
private void button_Clicked(object sender, RoutedEventArgs e)
{
    if (MyEvent != null)
        MyEvent(this, e);
}

这是从头开始的,没有编辑器,所以我可能写错了一些,但是您会明白的。

有两种方法可以解决此问题:

  1. 使用Routed Events 这使您可以将事件添加到“所有者” XAML可以使用和注册的UserControl上。 然后,内部按钮将引发这些事件。 有关路由事件的更多信息,请参见MSDN

  2. 使用显示为DepenencyProperty Commands 这允许“拥有” XAML将命令绑定到您的用户控件,然后由您的按钮调用。 您甚至可以将公开的Command属性直接绑定到按钮的属性。

第二个是首选,因为它保留在MVVM中,但是两者都可以工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM