• Silverlight的TabControl的selectionChanged事件中读取不到TextBox值的bug。


    在Silverlight中:

    1 TextBox比较特殊,只有在失去焦点的时候,Source的值才发生改变。(WPF中可以设置失去焦点时或者修改Text值是对Source进行通知)

    2 TabControl通过点击tab切换时,可以设置SelectionChanged,当tab发生变化时做一些处理,但是发生这个事件的时候,tab改变前的页面焦点是不发生变化的。

    问题出现了:

    如果页面中包含了一个TextBox,并且在TextBox中输入一些内容,这时候点其它Tab,在触发的 SelectionChanged中,是获取不到在TextBox中修改后的值的,因为

    这时候TextBox还没有失去焦点,TextBox中是旧的值(tab发生改变会先执行SelectionChanged,然后是当前焦点控件的LostFocus事件)。

    如何解决这个问题呢?

    方法1:可以模拟WPF中的做法,在TextBox的TextChanged事件中加入如下代码:

    1 private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
    2 {
    3            BindingExpression expresson = (sender as TextBox).GetBindingExpression(TextBox.TextProperty);
    4            expresson.UpdateSource();
    5 }
    每当文本发生改变时进行通知。
    如果页面TextBox很多,就比较麻烦了。
    方法2:在tabcontrl的tab加上GotFocus事件,在里边获取TextBox的值。

  • 相关阅读:
    HTC G7 搜索和感光按键修改
    Delphi开源组件SynEdit
    (转)Delphi获取windows系统版本信息
    TDateTime转UTC的时间差
    Windows7 C盘无法读写文件
    Convert UTC string to TDatetime in Delphi
    delphi抓全屏图,游戏窗口,游戏Client窗口
    ADO Table Locate
    Delphi与管道操作
    Delphi从UTC (GMT)返回时差
  • 原文地址:https://www.cnblogs.com/mycrystal/p/1950250.html
Copyright © 2020-2023  润新知