0

MVVM以外のアプリケーションがあります。メインウィンドウには、いくつかのタブがある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で宣言されているEdiContentsTextBoxを認識していません。これをどのように解決できるか提案していただけますか?

ありがとう。

4

1 に答える 1

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