我有一个非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。你能否建议如何解决这个问题?
感谢。
答案 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
}
}