将右键单击事件连接到silverlight中的所有文本框

时间:2013-02-19 06:44:47

标签: silverlight textbox event-handling mouseevent

有没有向Silverlight中的所有文本框控件添加右键单击事件而无需手动将其添加到整个项目中的每个控件?

做得像:

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

然后将.cs中的事件修复大约50+(希望它只有50+)文本框可能需要一段时间。

如果没有,那么最简单的方法是什么?

2 个答案:

答案 0 :(得分:1)

我对this question的回答也是您问题的答案。

简而言之,最简单的方法是从TextBox派生一个类型,将MouseRightButtonDown事件处理程序放在那里,并用你的类型替换所有现有的textBox实例。

答案 1 :(得分: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常规样式。