我正在使用切換按鈕,並且我希望它只能通過鼠標單擊來更改其狀態。默認行爲是,如果焦點在按鈕上,則用戶可以按下「空格」或「輸入」來「點擊」它。我想取消這個,但仍然允許按鈕像平常一樣響應鼠標點擊(通過觸發點擊事件)。如何使silverlight按鈕只響應鼠標
有什麼想法?
感謝
我正在使用切換按鈕,並且我希望它只能通過鼠標單擊來更改其狀態。默認行爲是,如果焦點在按鈕上,則用戶可以按下「空格」或「輸入」來「點擊」它。我想取消這個,但仍然允許按鈕像平常一樣響應鼠標點擊(通過觸發點擊事件)。如何使silverlight按鈕只響應鼠標
有什麼想法?
感謝
您可以設置IsTabStop屬性設置爲false,你將不能夠把重點放在按鈕在這種情況下,因此不能對鍵盤響應。
我嘗試了一個行爲,正如我在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
}
}
感謝,對齊,但不會只在按鈕已經捕獲並響應按鍵後調用sp_KeyUp例程?這意味着取消如果不會阻止按鈕獲得按鍵。 另外 - 如果按鈕捕捉事件,爲什麼容器將它放在第一位?它甚至不會泡到容器... 或者我錯了嗎? :-) –
我試過了(在代碼中,而不僅僅是我的頭),你是對的。我將它與WPF中的隧道事件(PreviewXXX)混合在一起,這在Silverlight中你甚至做不到。感謝您的更正:)。在那次嘗試後,我想安德魯斯有正確的答案。 – Aligned
感謝安德魯,但是這不是我想在這裏實現。我希望按鈕獲得焦點,並且我希望用戶能夠按下回車鍵,但我不希望該按鈕因此被點擊。我想給輸入鍵一個不同的行爲。問題在於,當按下Enter或Space時,按鈕甚至不會生成KeyDown和KeyUp(它對所有其他鍵都有效)。 –
然後我相信唯一的方法是從Button類派生,重寫OnKeyDown而不是調用基本實現。 ButtonBase類重寫OnKeyDown | Up方法並響應那裏的鍵。 – AndrewS
@AndrewS,聽起來像是一個很好的嘗試。您也可以使用行爲做同樣的事情,然後將其應用於XAML。 – Aligned