【问题标题】:Is it possible to draw on top of a WPF ComboBox dropdown?是否可以在 WPF ComboBox 下拉列表上进行绘制?
【发布时间】:2011-04-26 22:34:30
【问题描述】:

我正在开发一个记录用户输入的程序,通过在它们周围绘制一个框来装饰鼠标所在的 UI 组件非常有用。

我通过在我正在录制和绘制的程序的顶部创建一个透明窗口来做到这一点。

这适用于大多数程序,但在 ComboBox 下拉菜单下方绘制。看起来下拉列表是一个具有最顶层样式集的窗口。

我尝试将我的装饰窗口也设置为最顶部,下拉菜单仍然会覆盖它。如果我定期将我的装饰窗口设置为最顶层且处于活动状态,则当我激活装饰窗口时下拉菜单会关闭。我尝试设置包含下拉菜单的PopupPopup.StaysOpen 属性,但没有效果。

有什么方法可以让我在不修改菜单本身的情况下绘制下拉菜单?

谢谢。

【问题讨论】:

  • 结合使用边框、模板和触发器不是更好吗?而不是使用另一个窗口...?

标签: c# wpf combobox


【解决方案1】:

也许Adorner Layer,总是高于一切,是最好的解决方案?

【讨论】:

  • 装饰层+1。这正是它们的用途,您不必担心在用户 Alt+Tabs 退出应用程序后装饰器窗口仍然打开等问题。
【解决方案2】:

您是否尝试过使用弹出控件而不是窗口?我相信它与 ComboBox DropDown 绘制在同一层上,因此您应该能够将 ZIndex 设置为在 DropDown 之上绘制。

您可以通过向 ComboBox 添加 Style 来设置 ComboBox 的弹出 ZIndex

<ComboBox>
    <ComboBox.Resources>
        <Style TargetType={x:Type ComboBox}>
            <Setter Property="Canvas.ZIndex" Value="1" />
        </Style>
    </ComboBox.Resources>
<ComboBox>

【讨论】:

    【解决方案3】:

    我可以通过将窗口的 ShowActivated 设置为 false,然后在弹出窗口打开后将其设置为 Topmost 来实现此功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 2017-08-05
      • 1970-01-01
      • 2015-12-24
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      相关资源
      最近更新 更多