2012-05-24 32 views
0

在我看來,以後我有一個TextboxButton旁邊附加到一個Command可以或不能執行基於輸入了正確的值(使啓用或禁用的按鈕)在文本框中。按鈕,您可以正確的輸入在文本框

一切工作正常,除了事實之後,用戶輸入正確的值並按Tab鍵焦點不移動到指定的按鈕,但它後面的控件,雖然該按鈕得到正確啓用。

換句話說,按下TAB按鈕啓用按鈕並獲得焦點後,UI速度不夠快。相反,按鈕已啓用,但焦點已移至其他控件後。

TextBox結合的UpdateSourceTriggerLostFocus,我想有這樣說,這因爲很多事情碰巧有它PropertyChanged爲每一個字符的用戶輸入。

有什麼建議嗎?先謝謝你。

+0

,請查看是否http://stackoverflow.com/questions/6088393/enable-button-on-valid-textbox解決它。 –

+0

感謝您的關注...我已經展示了這個問題。這可能是一個解決方案,如果我沒有解決這個問題,只需基於命令的CanExecute來控制它的行爲。 CommandManager.InvalidateRequerySuggested()不幸的是不起作用... – Dummy01

+0

您是否嘗試將updatesourcetrigger設置爲propertychanged? –

回答

0

最後,我來到了一個解決方案,而不破壞太多,我使用MVVM模式(指具體名稱的具體控制)。

我所做的是將UpdateSourceTrigger設置爲PropertyChanged而不是LostFocusPropertyChanged的問題是我的ValueConverter不再運行。因此,儘管按鈕現在被正確啓用或禁用,並準時就緒以接收焦點,但我的文本框中顯示的值並不正確。

我解決了通過聽文本框的LostFocus事件,並使用BindingExpression.UpdateTarget()我的TextBox.Text現在正確顯示。

這就是:

<TextBox 
    Text="{Binding Path=SpecialText, Converter={StaticResource myConverter}, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" 
    LostFocus="TextBox_LostFocus"> 
</TextBox> 


private void TextBox_LostFocus(object sender, RoutedEventArgs e) 
{ 
    (sender as TextBox).GetBindingExpression(TextBox.TextProperty).UpdateTarget(); 
} 
0

在我看來,你有兩個選擇:不是LostFocus

  1. 使用UpdateSourceTrigger=Explicit,並附上自己的LostFocus處理程序,這兩個更新綁定,如果相關的也將專注於您的按鈕。
  2. 附加您自己的LostFocus處理程序,用於檢查文本是否有效,如果是,則將焦點置回按鈕上。

在這兩種情況下,你可能需要在一個單獨的調度信息進行設定重點:

private void OnLostFocus(...) 
{ 
    if (textIsValid) 
    { 
     this.Dispatcher.BeginInvoke((Action)() => button.Focus()); 
    } 
} 
+0

謝謝。我會嘗試並報告回去...... – Dummy01

相關問題