WPF用户控件继承3

时间:2012-09-20 15:15:59

标签: c# wpf inheritance user-controls

我有一个非MVVM应用程序。在MainWindow中,我有一个带有几个选项卡的TabControl,每个选项卡都包含一个UserControl。因为这些UserControl具有类似的功能,所以我从继承自UserControl的基类派生它们。每个UserControl都有一个名为EdiContents的TextBox。每个人都有一个按钮:

<Button Name="Copy" Content="Copy to Clipboard" Margin="10" Click="Copy_Click" />

我想在基本UserControl类中实现Copy_Click:

private void Copy_Click(object sender, RoutedEventArgs e)
{
    System.Windows.Forms.Clipboard.SetText(EdiContents.Text);
}

但是基类不知道在每个UserControl的XAML中声明的EdiContents TextBox。你能否建议如何解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:1)

你可以这样做。

public partial class DerivedUserControl : BaseUserControl
{
    public DerivedUserControl()
    {
        InitializeComponent();
        BaseInitComponent();
    }
}

注意您在BaseInitComponent之后致电InitializeComponent

XAML背后的派生控件

<app:BaseUserControl x:Class="WpfApplication5.DerivedUserControl"
                     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                     xmlns:app="clr-namespace:WpfApplication5"
                     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                     >
    <Grid>
        <Button Name="CopyButton"/>
    </Grid>
</app:BaseUserControl>

                  

在BaseUserControl :: BaseInitComponent中,您只需按名称查找按钮并连接事件。

public class BaseUserControl : UserControl
{
    public void BaseInitComponent()
    {
        var button = this.FindName("CopyButton") as Button;
        button.Click += new System.Windows.RoutedEventHandler(Copy_Click);
    }

    void Copy_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        //do stuff here
    }
}