2011-11-21 58 views
1

我正在使用切換按鈕,並且我希望它只能通過鼠標單擊來更改其狀態。默認行爲是,如果焦點在按鈕上,則用戶可以按下「空格」或「輸入」來「點擊」它。我想取消這個,但仍然允許按鈕像平常一樣響應鼠標點擊(通過觸發點擊事件)。如何使silverlight按鈕只響應鼠標

有什麼想法?

感謝

回答

2

您可以設置IsTabStop屬性設置爲false,你將不能夠把重點放在按鈕在這種情況下,因此不能對鍵盤響應。

+1

感謝安德魯,但是這不是我想在這裏實現。我希望按鈕獲得焦點,並且我希望用戶能夠按下回車鍵,但我不希望該按鈕因此被點擊。我想給輸入鍵一個不同的行爲。問題在於,當按下Enter或Space時,按鈕甚至不會生成KeyDown和KeyUp(它對所有其他鍵都有效)。 –

+0

然後我相信唯一的方法是從Button類派生,重寫OnKeyDown而不是調用基本實現。 ButtonBase類重寫OnKeyDown | Up方法並響應那裏的鍵。 – AndrewS

+0

@AndrewS,聽起來像是一個很好的嘗試。您也可以使用行爲做同樣的事情,然後將其應用於XAML。 – Aligned

1

我嘗試了一個行爲,正如我在AndrewS的帖子中的常見建議,但發現KeyDown事件沒有捕獲空間或輸入事件。如果是空格或輸入密鑰,您可以捕獲更高級別的事件並取消它。

XAML:

<StackPanel KeyUp="sp_KeyUp"> 
    <ToggleButton x:Name="toggleButton" content="toggle me" width="120" height="20"/> 
</StackPanel> 

代碼背後:

public void sp_KeyUp(object sender, KeyBoardEventArgs e) 
{ 
    if(e.Key == System.Windows.Input.Key.Enter || e.Key == System.Windows.Input.Key.Space) 
    { 
    e.Handled = true; // this should cancel the event 
    } 
} 
+0

感謝,對齊,但不會只在按鈕已經捕獲並響應按鍵後調用sp_KeyUp例程?這意味着取消如果不會阻止按鈕獲得按鍵。 另外 - 如果按鈕捕捉事件,爲什麼容器將它放在第一位?它甚至不會泡到容器... 或者我錯了嗎? :-) –

+0

我試過了(在代碼中,而不僅僅是我的頭),你是對的。我將它與WPF中的隧道事件(PreviewXXX)混合在一起,這在Silverlight中你甚至做不到。感謝您的更正:)。在那次嘗試後,我想安德魯斯有正確的答案。 – Aligned