WPF TextBox UpdateSourceTrigger=LostFocus保持更新数据
本文关键字:更新 数据 LostFocus TextBox UpdateSourceTrigger WPF | 更新日期: 2023-09-27 17:59:20
我正在学习WPF系列教程。目前我正处于这一步http://www.wpf-tutorial.com/data-binding/responding-to-changes/
我遇到的问题是,我希望Textbox只在我离开Textbox时更新值。但是,即使我在文本框内外,当我更改窗口大小时,值也会更新。这不是我所期望的。我的错误在哪里?
这里是自己测试的代码的简短版本:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<WrapPanel Orientation="Horizontal" Margin="0,10,0,0">
<TextBlock Text="Window dimensions: "/>
<TextBox Text="{Binding Width, UpdateSourceTrigger=LostFocus}" Width="50" />
<TextBlock Text=" x " />
<TextBox Text="{Binding Height, UpdateSourceTrigger=PropertyChanged}" Width="50"/>
</WrapPanel>
</Grid>
</Window>
但是,即使我在TextBox中,当我更改窗口大小。
您自己说过,在更改窗口大小时,值会更新。这是因为焦点从文本框中丢失了。如果您希望文本框即使在焦点丢失后也能聚焦,您可以通过编程将焦点设置为文本框。
第二文本框<TextBox Text="{Binding Height, UpdateSourceTrigger=PropertyChanged}" Width="50"/>
也具有UpdateSourceTrigger=PropertyChanged
。我希望你解释的不是这种情况,因为每当在文本框中输入新字符时,UpdateSourceTrigger=PropertyChanged
都会更新源。
UpdateSourceTrigger从TextBox工作到绑定控件&所有物因此,我假设第一个TextBox只有在焦点丢失时才会更新Window的属性Width。第二个TextBox会在每次值更改时更新Window的属性Height。调整窗口大小时,两个TextBox都会更新,因为源是窗口。UpdateSourceTrigger属性在考虑将TextBox作为源时起作用。