【问题标题】:WPF | Click outside but popup can't close [duplicate]WPF |单击外部但弹出窗口无法关闭[重复]
【发布时间】:2020-10-05 13:51:47
【问题描述】:

有:

  • 切换按钮
  • 弹出窗口
  • 树形视图

树视图在弹出窗口中,弹出窗口附加到切换按钮。

我将Popup.IsOpen 绑定到ToggleButton.IsCheckedpopup.StaysOpen=false

当我打开弹窗,然后在外面点击,弹窗却无法自动关闭。

即使我单击 TreeView 的文本,然后单击外部,弹出窗口也无法自动关闭。

点击外部时如何让弹窗关闭?

迷你示例代码是:

<Window x:Class="WpfTest1.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"
    xmlns:local="clr-namespace:WpfTest1"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Grid>
    <ToggleButton Content="Test" Width="70" Height="30" Name="Btn" ClickMode="Press"/>
    <Popup PlacementTarget="{Binding ElementName=Btn}" StaysOpen="False" 
           IsOpen="{Binding ElementName=Btn,Path=IsChecked,Mode=TwoWay}">
        <TreeView>
            <TreeViewItem>
                <TreeViewItem Header="A"/>
                <TreeViewItem Header="B"/>
                <TreeViewItem Header="C"/>
            </TreeViewItem>
            <TreeViewItem>
                <TreeViewItem Header="D"/>
                <TreeViewItem Header="E"/>
                <TreeViewItem Header="F"/>
            </TreeViewItem>
        </TreeView>
    </Popup>
</Grid>

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    这是一个奇怪的问题。显然它是由ClickMode="Press" 引起的。如果您将其取出,Popup 将按您的预期打开和关闭。

    我不确定有什么办法可以解决这个问题。要么不使用ClickMode="Press",要么使用代码而不是绑定打开/关闭Popup

    【讨论】:

    • 谢谢,如果我将点击模式设置为释放,当我再次点击然后切换按钮时,弹出窗口无法关闭,因为切换按钮被点击了两次。
    • @TownDrin 嗯,你是对的。看看这个答案:stackoverflow.com/a/14257384/5086631
    • 好的,我看了答案,它成功地解决了我的问题。非常感谢。
    猜你喜欢
    • 2021-11-21
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2014-06-26
    相关资源
    最近更新 更多