将右键单击事件连接到silverlight中的所有文本框
是否可以向silverlight中的所有textbox控件添加右键单击事件,而无需手动将其添加到整个项目中的每个控件 像这样做:将右键单击事件连接到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+)
<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>