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

将右键单击事件连接到silverlight中的所有文本框,silverlight,textbox,event-handling,mouseevent,Silverlight,Textbox,Event Handling,Mouseevent,是否可以向silverlight中的所有textbox控件添加右键单击事件,而无需手动将其添加到整个项目中的每个控件 像这样做: <TextBox x:Name="txtName" MouseRightButtonUp="txtName_MouseRightButtonUp" MouseRightButtonDown="txtName_MouseRightButtonDown" /></TextBox> 然后将.cs中的事件修复大约50+(希望只有50+)

是否可以向silverlight中的所有textbox控件添加右键单击事件,而无需手动将其添加到整个项目中的每个控件

像这样做:

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

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

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

我的答案也是你问题的答案


简而言之,从TextBox派生类型可能是最简单的方法,将MouseRightButtonDown事件处理程序放在其中,并用您的类型替换TextBox的所有现有实例。

您可以扩展TextBox

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

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

并使用此控件。 或者作为替代解决方案-您可以创建以下行为:

政务司司长: ... 使用System.Windows.Interactive

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
    }
}
公共类TextBoxBehavior:Behavior
{
受保护的覆盖无效附加()
{
base.onatached();
AssociatedObject.MouseRightButtonDown+=AssociatedObject\u MouseRightButtonDown;
}
附加时受保护的覆盖无效()
{
base.OnDetaching();
AssociatedObject.MouseRightButtonDown-=AssociatedObject\u MouseRightButtonDown;
}
MouseRightButtonDown上的私有void(对象发送器,MouseButtonEventArgs MouseButtonEventArgs)
{
e、 已处理=正确;
//做点什么
}
}
XAML:

xmlns:i=“clr命名空间:System.Windows.Interactivity;assembly=System.Windows.Interactivity”

并将此处理程序附加到您的文本框常规样式。

在我添加标记以指定行为之前不起作用。看来我得手工做了。我在想一些方法,这样其他程序员就不需要添加这些了。我更新了帖子,并将链接添加到一篇描述如何将行为添加到样式的帖子中。而该帖子仍然没有接受我的编辑。更新:请看,您可能会忽略xaml代码,转而使用样式是的,我的意思是您应该在样式中附加行为,但出现了错误并编写了“handler”而不是“behavior”:。谢谢你的更新。
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

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