LostFocus事件在获得Focus时触发

本文关键字:Focus 事件 LostFocus | 更新日期: 2023-09-27 18:29:34

我有一个绑定到对象集合的itemscontrol

在数据模板中,我绑定了一个操作,该操作将由所有创建的控件在焦点丢失时使用。

在控件中,有一个文本框,因此如果项目控件ItemSource中有1个项目,则会有2个文本框。

现在,如果Textbox 1有焦点,并且我单击了Textbox 2之外的某个位置,那么该操作将执行一次(因为焦点丢失)。但是,如果我在文本框2中单击,该操作将执行两次。为什么?

<ItemsControl Grid.Row="1" Margin="0,5,0,5" ItemsSource="{Binding
        RelativeSource={RelativeSource FindAncestor,
        AncestorType={x:Type Window}}, Path=Collection}">
    <ItemsControl.ItemTemplate>
        <DataTemplate DataType="{x:Type ct:CollectionItem}">
            <cc:TestControl
                ValueChangedAction="{Binding
                    RelativeSource={RelativeSource FindAncestor,
                    AncestorType={x:Type Window}}, Path=ValueChangedAction}"
                VerticalAlignment="Center" HorizontalAlignment="Center" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

这就是控制。

<ewt:DecimalUpDown  Tag="{Binding Uid}" Grid.Row="0" Grid.Column="3"
    HorizontalAlignment="Stretch" TextAlignment="Left" Margin="10,5,10,5"
    FormatString="C2"  ShowButtonSpinner="False" VerticalAlignment="Center"
    Value="{Binding Value}" LostFocus="DecimalUpDown_LostFocus" />

绑定操作在此事件处理程序中执行。

LostFocus事件在获得Focus时触发

如果您的操作应该更新绑定的源(例如,在您的示例中看起来像Window),您可能需要尝试将OneWayToSource添加到绑定中,以便绑定只以一种方式发生—从文本框到它绑定到的任何内容。