首页 > 解决方案 > 当我在文本框内单击时,如何在 wpf 中启用弹出控件?

问题描述

这是我想添加的功能。我已经制作了 ea 类,将最后一个用户搜索文本保存到 .txt 文件中。当用户打开我的应用程序时,我还可以将搜索列表加载到列表中。但是,我需要帮助的是在我的 xaml 中显示此列表。

我想为用户实现的是当他/她在搜索框内单击时,我想加载最后保存的搜索列表。我希望它显示在搜索框下方的 Popup 控件内的 ListView 中。这就是我设置 xaml 的方式

<TextBox Grid.Column="1"
                 Width="100"
                 Name="TextBox"
                 Text="{Binding SearchText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
            <TextBox.Resources>
                <Style TargetType="{x:Type Popup}">
                    <Style.Triggers>
                        <Trigger Property="IsFocused" Value="True">
                            <Setter Property="IsOpen" Value="True" />
                        </Trigger>
                        <Trigger Property="IsFocused" Value="False">
                            <Setter Property="IsOpen" Value="False" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </TextBox.Resources>
        </TextBox>
        <Popup Name="SavedSearchesList">
            <ListView ItemsSource="{Binding SavedSearchesList, Mode=OneWay}"
                      SelectedItem="{Binding SavedSearchSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">                
            </ListView>
        </Popup>

但是,当我在文本框内单击时,我的弹出控件没有打开。我究竟做错了什么?提前谢谢了。

标签: wpf

解决方案


从 TextBox 中删除 Trigger 并为您的 Popup 尝试以下操作:

<Popup Name="SavedSearchesList" IsOpen="{Binding IsFocused, ElementName=NameofTextBox}">
    <ListView ItemsSource="{Binding SavedSearchesList, Mode=OneWay}"
              SelectedItem="{Binding SavedSearchSelected, Mode=TwoWay, 
              UpdateSourceTrigger=PropertyChanged}">                
    </ListView>
</Popup>

请记住,您必须为您的 TextBox 设置一个名称,并将“NameofTextBox”替换为该名称。希望这有效。


推荐阅读