2013-02-19 59 views
0

無論如何在Silverlight中向所有文本框控件添加右鍵單擊事件而無需手動將其添加到整個項目中的每個控件?在Silverlight中將右鍵單擊事件連接到所有文本框

做這樣:

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

然後固定在的.cs事件約50+(希望這只是50+)文本框可能需要一段時間。

如果不是,那麼最簡單的方法是什麼?

回答

1

您可擴展的文本框

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

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

==========

並使用此控制。 或作爲替代解決方案 - 您可以創建行爲:

CS: ... using 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> 

,並附這個處理程序到你的文本框大將風範。

+0

直到我添加了標記來指定行爲後才起作用。看起來我必須手動執行該操作。我正在考慮某種方式,以便其他編碼人員不需要添加這些編碼。 – Bahamut 2013-02-19 07:42:58

+0

好吧,我開玩笑。我更新了帖子,並將鏈接添加到描述如何將行爲添加到樣式的帖子中。 – Bahamut 2013-02-19 10:29:32

+0

雖然海報仍然沒有接受我的編輯。 更新:請參閱http://stackoverflow.com/questions/13498216/attach-behaviour-to-all-textboxes-in-silverlight您可以忽略xaml代碼並繼續使用樣式代替 – Bahamut 2013-02-19 12:15:15

1

我對this question的回答也是你的問題的答案。

簡而言之,從TextBox派生一個類型可能是最容易的,將您的MouseRightButtonDown事件處理程序放在那裏,並用您的類型替換所有現有的textBox實例。