0

プロジェクト全体の各コントロールに手動で追加することなく、Silverlightのすべてのテキストボックスコントロールに右クリックイベントを追加する方法はありますか?

次のようにしています:

<TextBox x:Name="txtName" MouseRightButtonUp="txtName_MouseRightButtonUp" 
    MouseRightButtonDown="txtName_MouseRightButtonDown" /></TextBox>

次に、.cs内のイベントを約50以上(できれば50以上)のテキストボックスで修正するには、しばらく時間がかかる場合があります。

そうでない場合、これを行う最も簡単な方法は何でしょうか?

4

2 に答える 2

1

この質問に対する私の答えは、あなたの質問に対する答えでもあります。

つまり、TextBoxから型を派生させ、そこにMouseRightButtonDownイベントハンドラーを配置し、textBoxの既存のすべてのインスタンスを型に置き換えるのがおそらく最も簡単です。

于 2013-02-19T07:05:54.980 に答える
1

テキストボックスを拡張できます

class SimpleTextBox
{
    public SimpleTextBox()
    {
        DefaultStyleKey = typeof (SimpleCombo);
        MouseRightButtonDown += OnMouseRightButtonDown;
    }

    private void OnMouseRightButtonDown(object sender, MouseButtonEventArgs   
mouseButtonEventArgs)
    {
        //TODO something
    }
}

==========

そして、このコントロールを使用します。または、代替ソリューションとして、動作を作成できます。

CS:...System.Windows.Interactivityを使用します。

public class TextBoxBehavior : Behavior<TextBox>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.MouseRightButtonDown += AssociatedObject_MouseRightButtonDown;
    }

    protected override void  OnDetaching()
    {
         base.OnDetaching();
         AssociatedObject.MouseRightButtonDown -= AssociatedObject_MouseRightButtonDown;         
    }

    private void OnMouseRightButtonDown(object sender, MouseButtonEventArgs mouseButtonEventArgs)
    {
        e.Handled = true;
        // DO SOMETHING
    }
}

XAML:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

<TextBox ...>
    <i:Interaction.Behaviors>
        <local:TextBoxBehavior />
    </i:Interaction.Behaviors>
</TextBox>   

そして、このハンドラーをTextBoxの一般的なスタイルにアタッチします。

于 2013-02-19T07:06:49.177 に答える