[英]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);
}
这是从头开始的,没有编辑器,所以我可能写错了一些,但是您会明白的。
有两种方法可以解决此问题:
使用Routed Events
。 这使您可以将事件添加到“所有者” XAML可以使用和注册的UserControl
上。 然后,内部按钮将引发这些事件。 有关路由事件的更多信息,请参见MSDN 。
使用显示为DepenencyProperty
Commands
。 这允许“拥有” XAML将命令绑定到您的用户控件,然后由您的按钮调用。 您甚至可以将公开的Command
属性直接绑定到按钮的属性。
第二个是首选,因为它保留在MVVM中,但是两者都可以工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.