我有一个用户控件:
<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中。
答案 0 :(得分:1)
您需要在UserControl中拥有相同的事件,然后在“表单”上订阅它们(虽然它不是正确的WPF术语),然后如果需要或者调用适当的话,您可以从那里引发新事件方法...
编辑:要从UserControl引发事件,只需在后面的代码中声明它们(稍后根据以下注释更新):
public event RoutedEventHandler MyEvent;
private void button_Clicked(object sender, RoutedEventArgs e)
{
if (MyEvent != null)
MyEvent(this, e);
}
这是来自没有编辑的头,所以我可能写错了,但你会明白的。
答案 1 :(得分:0)
有两种方法可以解决这个问题:
使用Routed Events
。这样,您就可以在UserControl
上添加&#34;拥有&#34; XAML可以使用和注册。然后内部按钮会引发这些事件。有关路由事件的详细信息,请参阅MSDN。
将Commands
公开为DepenencyProperty
。这允许&#34;拥有&#34; XAML将命令绑定到用户控件,然后由按钮调用。您甚至可以将公开的Command
属性直接绑定到按钮上。
第二个是首选,因为它保留在MVVM中,但两者都可以。