我正在通过WPF的教程系列。目前我正处于这一步http://www.wpf-tutorial.com/data-binding/responding-to-changes/
我遇到的问题是我希望Textbox只在我离开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>
答案 0 :(得分:3)
但是,即使我在TextBox内部,我也会更新值 改变窗口大小。
您自己说过,在更改窗口大小时,值会更新。这是因为文本框中的焦点丢失了。如果您希望焦点丢失,则可以通过编程方式将焦点设置到文本框中。
第二个文本框<TextBox Text="{Binding Height, UpdateSourceTrigger=PropertyChanged}" Width="50"/>
也有UpdateSourceTrigger=PropertyChanged
。我希望不是你要解释的情况,因为只要在文本框中输入新字符,UpdateSourceTrigger=PropertyChanged
就会更新来源。
答案 1 :(得分:1)
UpdateSourceTrigger从TextBox到绑定控件&amp;属性。所以,我想第一个TextBox只在焦点丢失时才更新Window的属性Width。第二个TextBox在每次更改值时更新窗口的属性高度。调整窗口大小时,两个TextBox都会更新,因为源是Window。 UpdateSourceTrigger属性的工作原理是将TextBox作为源。