首页 > 解决方案 > WPF 弹出窗口意外关闭

问题描述

我有一个带有文本框的应用程序。每当用户单击 TextBox 时,都会出现一个弹出窗口,提供其他选项。我设法使用下面的 XAML 代码做到了这一点。但是,当我单击复选框时,弹出窗口会自动关闭。如何防止这种情况?

我还尝试将 Pupup 的 IsOpen 属性绑定到我的视图模型,并使用 TextBox 的 LeftClick MouseAction 将其设置为 true,但随后 TextBox 失去焦点,实际输入变得非常繁琐。

当前的 XAML 代码:

<Window x:Class="WpfPopupTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <TextBox x:Name="Input" HorizontalAlignment="Center" VerticalAlignment="Center" Width="200" />
        <Popup PlacementTarget="{Binding ElementName=Input}" Placement="Top">
            <Popup.Style>
                <Style TargetType="{x:Type Popup}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=Input, Path=IsFocused}" Value="True">
                            <Setter  Property="IsOpen" Value="True" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Popup.Style>
            <StackPanel Orientation="Horizontal">
                <CheckBox/>
                <TextBlock Grid.Column="1">Option</TextBlock>
            </StackPanel>
        </Popup>
    </Grid>
</Window>

标签: c#wpfpopup

解决方案


正如 Digitalsa1nt 所建议的那样,问题是当您单击 CheckBox 时文本框失去焦点,并且触发器停止保持弹出窗口打开。

但是,如果 CheckBox 从未获得焦点,这不是问题。

<CheckBox Focusable="False"/>

推荐阅读