c# - 为透明的点击覆盖寻找一个好的 WPF 解决方案

标签 c# wpf .net-3.5 mvvm

我想尝试一些不同的东西,并试图在我当前的 WPF GUI 之上显示一个覆盖层,它允许用户仍然与 GUI 交互,但提供了一层烦人的信息让他们知道发生了什么事。

我的问题实际上是两个独立的问题:

<强>1。您将如何进行叠加?

我的第一次尝试是使用矩形,将填充设置为适当的颜色,然后更改不透明度。但它对点击率不透明。所以我想我想做的是,根据搜索结果,创建一个单独的窗口,将其背景设置为透明,然后将 AllowsTransparency 设置为 True。虽然这行得通,但如果我想执行类似 Background="DarkRed"Opacity="0.2" 的操作,点击将不再有效

这让我进入第二部分:

<强>2。如果我使用 MVVM,调整此覆盖区域大小的正确方法是什么?

我的主窗口创建了 ViewModel,ViewModel 创建了 Model。模型是唯一知道是否应该显示叠加层的东西。但是主窗口显然是唯一知道它的大小的东西,模型永远不知道它上面的任何东西。实现此目的的唯一方法是将覆盖窗口的大小数据绑定(bind)到 ViewModel 中的属性,然后在主窗口的大小发生变化时让 ViewModel 设置这些值吗?

有人知道我如何才能实现所有这些目标吗?

最佳答案

要处理第 1 部分:在叠加层上设置 IsHitTestVisible="False",无论是矩形、边框还是其他元素。这将允许您在不影响与底层控件的交互的情况下将其设置为您想要的任何颜色和透明度级别。

第 2 部分:您不应该使用单独的窗口。如果您将叠加层保留在主窗口中,您可以依靠 View 中的布局来自动处理叠加层的大小。

关于c# - 为透明的点击覆盖寻找一个好的 WPF 解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3877983/

相关文章:

c# - 使用 LibTiff.Net 重复目录更新现有图像中的标签

c# - 序列化对象 - 替换值

c# - 方法声明中参数名前的 '@' char是什么意思?

c# - 传递匿名函数而不是连接事件

c# - 实现IDataErrorInfo接口(interface)时 `public string this[string columnName]`是什么意思?

c# - 按下输入时从文本框中触发命令?

c# - 从控制台应用程序运行 WPF 应用程序时,忽略 App.xaml

c# - 在 ListView 中加载并显示所有项目后会触发哪个事件?

.net - 绑定(bind)到数据网格中的命令

c# - 如何以及在何处了解 .net 从 .net 2.0 到 .net 3.5 的变化?