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

时间:2014-06-24 19:28:10

标签: c# wpf xaml

我有一个用户控件:

<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中。

2 个答案:

答案 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)

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

  1. 使用Routed Events。这样,您就可以在UserControl上添加&#34;拥有&#34; XAML可以使用和注册。然后内部按钮会引发这些事件。有关路由事件的详细信息,请参阅MSDN

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

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