wpf 中的弹出窗口和切换按钮交互

2023-11-26

我有一个包含切换按钮和弹出窗口的控件。单击 ToggleButton 时,会出现弹出窗口。当 ToggleButton 未选中时,弹出窗口应关闭。此外,单击远离弹出窗口应导致其关闭,并导致切换按钮取消选中。

我通过将 Popup 的 StaysOpen 属性设置为 false,并将切换按钮的 IsChecked 属性设置为双向绑定到 Popup 的 IsOpen 属性来进行设置。

一切都很好,除了一种情况 - 选中按钮并打开弹出窗口后,单击按钮不会导致弹出窗口关闭,或者按钮返回到未选中状态。

我相信这一定是因为单击按钮会导致 Popup 的 StaysOpen 逻辑将 Popup 的 IsOpen 属性设置为 false。反过来,这会将切换按钮设置为未选中。这必须在处理我点击按钮之前发生 - 因此点击会重新检查按钮,即竞争条件。

知道如何获得我想要的行为吗?


如果您的假设是正确的,您需要一个自定义 Popup 类,如下所示:

public class MyPopup : Popup {
    protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e) {
        bool isOpen = this.IsOpen;
        base.OnPreviewMouseLeftButtonDown(e);

        if (isOpen && !this.IsOpen)
            e.Handled = true;
    }
}

您可能需要删除!this.IsOpen来自 if 语句。如果您改用 MyPopup,它将阻止 MouseLeftButtonDown 事件到达 ToggleButton。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

wpf 中的弹出窗口和切换按钮交互 的相关文章

  • WPF 中的液体布局?

    Liquid布局在WPF中可行吗 当我们进行 Liquid 布局时 我们需要解决哪些顾虑 问题 Liquid 布局是否会调整文本字体大小 并且在图像变小和变大时也会调整图像宽度 是的 大多数容器 在 WPF 中称为面板 都支持液体布局 但使
  • 更换桌面壁纸/在桌面上绘制

    我想对我的 Windows 桌面进行一些自定义绘图 以便它看起来可以替换桌面背景 壁纸 我的第一次尝试是获得 DCdesktopListView并绘制它 IntPtr desktopDC GetWindowDC desktopListVie
  • WPF 动画:如何使其滑入?

    所以我刚刚进入动画领域 我想做一个 滑出 动画 我成功地做到了 但现在我希望它通过单击同一个按钮滑入 就像我单击它 它滑出 然后我希望当我再次单击它时它滑回 后面没有任何代码 所以只需通过 xaml 这是 XAML
  • 如何在silverlight中将子元素的宽度绑定到父元素的宽度

    我有一个宽度为 1 的网格 所以我认为实际宽度是在运行时决定的 在该网格中 我有另一个网格 我想将其宽度设置为父网格的运行时宽度 我如何通过绑定在 xaml 中做到这一点 我想这实际上会对你有帮助 Width Binding ActualW
  • WPF 通知获取属性的 PropertyChanged

    我有INotifyPropertyChanged实施使用CallerMemberName public event PropertyChangedEventHandler PropertyChanged protected virtual
  • 使用 MVVM 在 WPF 中进行 COMBOBOX 过滤

    我正在使用 WPF mvvm 方法开发一个应用程序 我有一个要求 必须在组合框中显示项目列表以供选择 基于一些标志 我需要从组合框中过滤掉一些项目以供选择 我尝试使用两种不同的项目源 一个具有完整列表 另一个具有过滤列表 并基于我想要更改项
  • 在 WPF 中处理第二个 UI 线程

    我有一个长时间运行的进程在我的 UI 线程上运行 我无法离开 UI 线程 相反 我尝试创建第二个具有等待动画的 UI 线程 这是我用来创建第二个 UI 线程的代码 Private busyThread As Thread Private w
  • WPF ICommand CanExecute():RaiseCanExecuteChanged() 或通过 DispatchTimer 自动处理?

    我正在尝试确定使 ICommands 的 CanExecute 反映在 UI 中的最佳方法 据我了解 调度员是处理 UI 绘图的 WPF 引擎 默认情况下 调度程序在实例化以及活动用户界面 单击 UI 或键盘输入 时评估 ICommands
  • Silverlight UserControl 自定义属性绑定

    在 Silverlight 用户控件中实现自定义属性的正确方法是什么 从技术上讲 Silverlight 中的每个 页面 都是一个 UserControl 它们派生自 UserControl 类 当我在这里说 UserControl 时 我
  • 使用引用的 ItemsSource 绑定到 SelectedItem

    Intro 我有一个不同的数据源池 我有口罩 面具有索引线 每个 Indexline 都有一个来自关联池的数据源 Classes public class DataSource public string Name get set publ
  • 网格上的 SharedSizeScope 使表单“跳舞”

    我的页面上有一个 StackPanel 也尝试过使用 Grid
  • WPF TreeView 绑定[重复]

    这个问题在这里已经有答案了 我有一个带有父级和子级属性的课程 ADO NET 实体框架分层页面类 http img148 imageshack us img148 6802 edmxxe8 gif http img148 imageshac
  • WPF WebBrowser (3.5 SP1) 始终位于顶部 - 在 WPF 中显示 HTML 的其他建议

    我一直在拼命寻找一种在 WPF 应用程序中显示 HTML 的简单方法 有一些选项 1 使用WPF Web浏览器控件2 使用帧控制3 使用第三方控件 但是 我遇到了以下问题 1 WPF WebBrowser Control不是真正的WPF 它
  • tabControl/tabitem 刷新困难

    我有一个带有 maintabWindow 和几个 tabitem 的 WPF 窗口 它通常工作正常 布局是这样的 但是当我之前添加以下窗口时 结果是这样的 所以问题与 tabControl tabItem 刷新有关 这是相当明显的 但更重要
  • WPF - 在样式中使用 ControlTemplate 资源

    创建样式时 是否可以将 ControlTemplate 属性设置为先前定义的资源 例如 如果我在 ResourceDictionary 中有以下内容
  • 使用 TemplateColumns 将 WPF DataGrid 绑定到 DataTable

    我已经尝试了一切但一无所获 所以我希望有人能给我一个顿悟的时刻 我根本无法获得成功提取数据网格中数据的绑定 我有一个包含 MyDataType 的多列的 DataTable public class MyData string nameDa
  • 传递给命令 WPF 的多个参数[重复]

    这个问题在这里已经有答案了 我有以下层次结构 abstract class TicketBase public DateTime PublishedDate get set class TicketTypeA TicketBase publ
  • WPF - 检测鼠标按下一段时间

    检测鼠标按钮何时在特定元素上按住特定时间段的最佳方法是什么 感谢您的提示 我创建了一个附加属性以避免任何代码隐藏 using System using System Windows using System Windows Threadin
  • WPF 元素宿主内存泄漏

    我在 Windows 窗体上使用元素主机时遇到奇怪的内存泄漏 我有一个主窗体 它打开另一个窗体 该窗体上只有 elementhost 控件 此时 它没有 wpf 控件子控件 只能打开 1 个主机表单 每次我打开窗体时 应用程序内存都会增加2
  • 滚动 X 轴绘图区域 - Silverlight 柱系列

    我有一个工作正常的柱形系列图表 我有一个需要添加的功能 我希望水平滚动能够启用到 x 轴的绘图区域 这是屏幕截图 如果您看到屏幕截图 我有 6 个项目 并且由于项目数量较多 条形图非常细 所以假设如果我有 20 个项目 那么条形图将根本不可

随机推荐

  • 为什么这些创建引用的方式表现不同?

    下面的代码运行正确 let a mut 3 a 4 assert eq a 4 以下也运行 let a Some 3 let mut b a unwrap assert eq a unwrap 3 但以下内容无法编译 let a Some
  • 通过php流式传输mp3文件

    这是我的 php 代码 用于通过 php 流式传输 mp3 文件 set time limit 0 dirPath path of the directory songCode REQUEST c filePath dirPath song
  • 易失性重载?

    我听说 volatile 和 const 一样是重载的因素 如果函数被易失性参数重载 易失性版本什么时候被调用 我无法想象调用 volatile version 时的情况 这是一个例子 include
  • VS Code SCSS 自动编译为 CSS

    我是编程新手 刚刚开始学习 HTML CSS 对于编码 我开始使用 VS Code 我真的很喜欢它 到目前为止 我遇到的唯一问题是将 SCSS 自动编译为 CSS 我搜索并阅读了许多解决方案 我发现最好的解决方案是在 VS Code 终端中
  • PHP 解析 ISO 格式的日期 [重复]

    这个问题在这里已经有答案了 我目前正在使用 ConstantContact 它返回带有更新字段的 XML 格式如下 2013 02 13T08 35 34 195Z 我假设这是日期 c 格式 如何解析这个格式呢 斯特托时间没有返回正确的值
  • 问:如何在命令提示符下显示汉字

    是否可以在命令提示符下显示中文字符 如果是这样 设置是什么 如果您需要阅读简体中文 GBK 即代码页936 在dos提示符下输入以下命令 chcp 936 Update 微软推出了一个新的终端应用程序 https aka ms termin
  • 在 WPF 窗口的构造函数中,InitializeComponent() 之前和之后应该做什么?

    一般来说 我一直在初始化Window之前的自己InitializeComponent 并设置随后包含的控件 然而 我并没有那么一致 而且我还没有真正注意到排序有问题 所以 我 可能 正在做一些可怕的事情吗 特别是之前设置子控件的属性是否有问
  • 如何将 ABRecordRef 添加到 iPhone 中的 NSMutableArray?

    我想创建一个 ABRecordRef 数组来存储具有有效生日字段的联系人 NSMutableArray bContacts NSMutableArray alloc init ABAddressBookRef addressBook ABA
  • 如何使用
  • 而不是提交按钮提交表单?
  • 我希望能够提交表单 但不必单击提交按钮 我希望能够单击 li 元素并让它提交 任何帮助都会很棒 提前致谢 Ncoder 您可以在 LI 上放置一个 onclick 事件来调用表单提交事件 li
  • Oracle 和 SQL Server select (+) 等效

    在甲骨文中我有 SELECT t2 Regkood t2 naitatel t2 naitafaks t3 lahtiolekuaeg t1 FROM table1 t1 table2 t2 table3 t3 WHERE t1 clien
  • 为什么Java的类型推断这么弱?

    说吧 我有一个方法 public static
  • 如何在oracle数据库中存储BigInteger值

    我已经使用 JDBC 将 Java 程序连接到 Oracle 数据库 我想存储BigInteger数据库中的值 512 位 列的类型应该是什么 我正在尝试这样 我在数据库中获取了一列数字类型 我转换了BigInteger to BigDec
  • 如何在 Swift 中将 url.query 转换为字典?

    我有一个进入 AppDelegate 方法的 URL func application application UIApplication open url URL sourceApplication String annotation A
  • 与在 Rhino Mocks 中使用 Ordered() 等效的 AAA 语法是什么

    我一生都无法找到使用 Rhino 中的 Fluent AAA 语法来验证操作顺序的正确语法 我知道如何使用旧的学校记录 播放语法来做到这一点 MockRepository repository new MockRepository usin
  • Capybara + RSpec 仅在控制器规格中看到空白页。为什么?

    我正在尝试为一个简单的控制器编写控制器规范 但是 Capybara 看不到任何页面内容 但是 在我的浏览器中查看该网站的页面效果很好 我究竟做错了什么 谢谢 我的控制器规格 我的spec helper rb 我的宝石文件 您需要明确告诉您的
  • JavaScript 颜色渐变

    使用带或不带 Jquery 的 javascript 我需要根据开始和结束颜色创建颜色渐变 这可以通过编程来完成吗 结束颜色只会是开始颜色的较暗阴影 并且它用于无序列表 我无法控制 li 项目的数量 我正在寻找一种解决方案 允许我选择开始和
  • C# 事件处理程序

    如何在 C 中检查 Button Click 事件是否有关联的处理程序 If button Click null 抛出编译错误 你不能 事件只是公开 添加处理程序 和 删除处理程序 仅此而已 事实上 在 CLR 中 您还可以使用元数据将方法
  • 如何使用 google API for python 在特定文件夹下创建工作表?

    我可以在 我的云端硬盘 的根目录中使用以下代码创建一个工作表 但是如何在 我的云端硬盘 或 共享云端硬盘 的文件夹下创建该工作表 from googleapiclient discovery import build service bui
  • 如何在代码中设置绑定?

    我需要在代码中设置绑定 我似乎无法弄清楚 这是我尝试过的 XAML
  • wpf 中的弹出窗口和切换按钮交互

    我有一个包含切换按钮和弹出窗口的控件 单击 ToggleButton 时 会出现弹出窗口 当 ToggleButton 未选中时 弹出窗口应关闭 此外 单击远离弹出窗口应导致其关闭 并导致切换按钮取消选中 我通过将 Popup 的 Stay