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 回答