积极答复者
用Focus()方法使textbox重新获得焦点,为什么光标不能正常闪烁?

问题
答案
-
不能用PreviewLostKeyboardFocus,因为textbox3控件有Binding,我还需要用到系统提供的validation,而这个validation是在LostKeyboardFocus事件之后发生的。
数据绑定是在LostFocus事件里面作用的,你可以在PreviewLostKeyboardFocus事件里面手动调用产生LostFocus事件即可,代码如下:
void textBox3_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) { if (textBox3.Text != "abc") { e.Handled = true; RoutedEventArgs arg = new RoutedEventArgs(TextBox.LostFocusEvent, textBox3); textBox3.RaiseEvent(arg); } }
或者把绑定的UpdateSourceTrigger设置为PropertyChanged,这样不需要焦点丢失也能使绑定起作用。
如果真的要折腾这个光标的闪动问题,使用PreviewLostKeyboardFocus事件应该是最简单的方法了
全部回复
-
不能用PreviewLostKeyboardFocus,因为textbox3控件有Binding,我还需要用到系统提供的validation,而这个validation是在LostKeyboardFocus事件之后发生的。
数据绑定是在LostFocus事件里面作用的,你可以在PreviewLostKeyboardFocus事件里面手动调用产生LostFocus事件即可,代码如下:
void textBox3_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) { if (textBox3.Text != "abc") { e.Handled = true; RoutedEventArgs arg = new RoutedEventArgs(TextBox.LostFocusEvent, textBox3); textBox3.RaiseEvent(arg); } }
或者把绑定的UpdateSourceTrigger设置为PropertyChanged,这样不需要焦点丢失也能使绑定起作用。
如果真的要折腾这个光标的闪动问题,使用PreviewLostKeyboardFocus事件应该是最简单的方法了
-
不能用PreviewLostKeyboardFocus,因为textbox3控件有Binding,我还需要用到系统提供的validation,而这个validation是在LostKeyboardFocus事件之后发生的。
尝试使用下面的代码呢, 我这边是没有问题的:
<StackPanel> <TextBox Name ="mytestbox" LostKeyboardFocus="mytestbox_LostKeyboardFocus" > <TextBox.Text > <Binding Path="Name" > <Binding.ValidationRules> <ExceptionValidationRule/> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox> <Button>Click</Button> </StackPanel>
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Class1 c1 = new Class1(); c1.Name = "abc"; this.DataContext = c1; } private void mytestbox_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) { if (mytestbox.Text != "aaa") { mytestbox.Text =""; this.Focus(); } } public class Class1 { private string _name; public string Name { get { return _name; } set { _name = value; if (value =="a") { throw new ApplicationException("Customer name should not be a."); } } } } }
Lisa Zhu [MSFT]