2012-09-11 102 views
0

我處理myDialog1_KeyDown事件,如果回車鍵被按下我的方法將焦點移到下一個元素是這樣的:預防重點關閉按鈕,當按下Enter鍵時

UIElement focusedElement = Keyboard.FocusedElement as UIElement; 
if (focusedElement != null) 
{ 
    if(focusedElement.MoveFocus(newTraversalRequest(FocusNavigationDirection.Next))) 
    e.Handled = true; 
} 

myDialog1是myDockBase對象。 myDockBase是一個擴展DXWindow的類,用於應用程序中的每個模態對話框。

那麼問題是,當用戶位於最後一個字段 - 當他按Enter鍵焦點移至關閉按鈕(最小化和最大化按鈕被隱藏),然後如果他按Enter鍵再次關閉該窗口。

編輯:我想要什麼:如果關閉按鈕的重點是不允許用戶在按下關閉窗口回車鍵或者不將焦點移動到關閉按鈕

+1

這是一個強烈的違反UI標準。選中Close按鈕的IsDefault屬性,按Enter鍵總是關閉對話框。 –

回答

0

你不說你希望發生什麼。你可以檢查當前控件是否是最後一個字段(你必須有一個ID)。如果用戶當前在最後一個字段中,請不要前進到下一個字段。

+0

我添加了我希望發生在我的問題上的內容。我可以測試當前焦點字段是否是最後一個字段,但是我需要在每個表單上執行此操作(+將姓名添加到最後一個字段)。我在找一個更優雅的解決方案 – davor

+0

你可以把功能在父類,繼承它。確保您在整個關閉按鈕中輸入相同的ID。 – PaulPerry

+0

是的,但我不能讓我的課的關閉按鈕屬性,它隱藏在設計師。也許我可以嘗試添加一個透明的最後一個字段,並在輸入按鍵時將焦點移至第一個字段。 – davor

1

一個解決方案可能是禁止的關閉按鈕具有焦點可言,假設你不需要它。請參閱Focusable屬性。如果您在代碼中創建按鈕:closeButton.Focusable = false。如果在XAML中:<Button Focusable="false" Command="...">Close</Button>。這樣,當您導航焦點時,關閉按鈕不會出現在循環中。

+0

我知道這一點的解決方案,但它只能如果我在XAML創建按鈕。更好的解決方案是設置IsTabStop =「False」,然後該按鈕可通過鼠標進行調焦,而不是通過鍵盤進行調焦。但是,我需要在標準的Windows關閉按鈕(在窗口的右上角)上執行此操作。 – davor

相關問題