因此,我做了一些快速測試,看起來即使未啓用,控件也可以獲得焦點。我加在LostFocus
事件處理這些線textOne
:
Debug.Print(b.Name + " lost focus.");
Debug.Print("Disabling " + this.textTwo.Name);
與該線路GotFocus
事件處理程序textTwo
Debug.Print("Enabling " + this.textTwo.Name);
您可以在輸出窗口看到,當我標籤拖出的textOne
即使它被禁用,textTwo
確實得到焦點:
textOne失去焦點。
禁用文本兩個
textTwo得到了重點。
我認爲最好的解決方案是在禁用控件後手動設置焦點。事情是這樣的:
if (testCondition)
{
tx2.IsEnabled = false;
tx3.Focus();
}
else
{
tx3.IsEnabled = false;
tx2.Focus();
}
更好的解決方案
我喜歡這個更好的解決方案,因爲它不脆。如果您重新排序控件或更改條件邏輯,則不會引入奇怪的Tab鍵行爲。在爲tx2
的GotFocus
事件處理程序,您可以添加該代碼強制焦點移動到下一個控件,如果tx2
被禁用:
if (!tx2.IsEnabled)
{
tx2.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
};
創建一個轉換器來完成這項工作 –
你能提供更多的細節如何與做到這一點一個轉換器? – klawusel
要使用'Converter'來做到這一點,你需要創建'AttachedProperty'來啓用''基於其他'TextBoxes'來禁用'TextBox'然後你可以使用'Converter'來使'Enabled' /''基於'condition'的'Disabled'。 –