0

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

<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。你能建议如何解决这个问题吗?

谢谢。

4

1 回答 1

1

你可以做这样的事情。

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

请注意,您是BaseInitComponentInitializeComponent

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
    }
}
于 2012-09-20T15:29:31.123 回答