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>

WPF TextBox UpdateSourceTrigger=LostFocus保持更新数据

但是,即使我在TextBox中,当我更改窗口大小。

您自己说过,在更改窗口大小时,值会更新。这是因为焦点从文本框中丢失了。如果您希望文本框即使在焦点丢失后也能聚焦,您可以通过编程将焦点设置为文本框。

第二文本框<TextBox Text="{Binding Height, UpdateSourceTrigger=PropertyChanged}" Width="50"/>也具有UpdateSourceTrigger=PropertyChanged。我希望你解释的不是这种情况,因为每当在文本框中输入新字符时,UpdateSourceTrigger=PropertyChanged都会更新源。

UpdateSourceTrigger从TextBox工作到绑定控件&所有物因此,我假设第一个TextBox只有在焦点丢失时才会更新Window的属性Width。第二个TextBox会在每次值更改时更新Window的属性Height。调整窗口大小时,两个TextBox都会更新,因为源是窗口。UpdateSourceTrigger属性在考虑将TextBox作为源时起作用。