【问题标题】:zIndex on ComboBox in WPF?WPF中组合框上的zIndex?
【发布时间】:2018-09-24 15:31:28
【问题描述】:

我需要在同一个数据网格单元格中有三个组合框,如下所示:

<Grid Name="gridFormat_1" Grid.Row="1" Grid.Column="6" Margin="0, 5, 5, 5" >
    <Grid.RowDefinitions>
        <RowDefinition/>
    </Grid.RowDefinitions>

    <ComboBox Grid.Row="0" Name="monthsCB" DisplayMemberPath="MonthName" IsEnabled="False" Opacity="0" />
    <ComboBox Grid.Row="0" Name="quartalsCB" DisplayMemberPath="QuartalNumber" IsEnabled="False" Opacity="0" />
    <ComboBox Grid.Row="0" Name="yearsCB" DisplayMemberPath="Year" IsEnabled="False" Opacity="0" />
</Grid>

我希望能够在给定时间显示/隐藏某些组合框。但是,尽管 Opacity 和 IsEnabled、隐藏/显示、禁用/启用除我选择的组合框之外的每个组合框,但我无法单击“yearsCB”下方的组合框,因为它是最后添加的。

这意味着其他两个组合框不接收鼠标事件。

我发现我应该使用其他一些 WPF 标记来包装我的组合框,这样我就可以在每个组合框上切换 ZIndex。

哪个标签可以让我操作 Canvas 或 ZIndex?

或者还有其他更好的方法来实现这一点吗?

【问题讨论】:

  • 更新单个组合框的 DisplayMemberPath 是否比尝试管理 z 顺序更容易?无论如何,这不是你要做的吗?基本上将 DisplayMemberPath 绑定到单个属性并根据业务逻辑更新该属性。
  • wpf 中的DataTriggers 可以解决你的问题。只需描述一个场景,您希望组合框何时可见/隐藏。
  • @sous2817 我只有一个组合框,我用月份、夸脱和年份动态填充。我正在工作,但它与 GUI 混合在一起。现在尝试使用 MVVM 和 INotifyPropertyChanged,但如果组合框中值的数据类型动态变化,则不确定如何将单个组合框绑定到单个属性。
  • @Sham 我问了这个问题stackoverflow.com/questions/52481109/…

标签: c# wpf combobox z-index


【解决方案1】:

如果需要设置ZIndex,可以通过属性来实现

Panel.ZIndex="1"

数字越大,项目越高。默认 ZIndex 为 0。

在 WPF 中,您将元素定位在其父级内 - 在这种情况下,父级是 Grid。 Grid class 派生自Panel class,Panel 有ZIndex attached property

如果您想在一个位置的 3 个组合框之间切换,您应该更改它们的可见性。如果元素在 UI 中启用,Opacity 只会更改视觉状态和 IsEnabled 设置。

对于隐藏的组合框:

Visibility="Hidden"

对于可见的组合框:

Visibility="Visible"

【讨论】:

  • Visibility 属性完成了这项工作。它现在工作。但是我不明白如何应用 Panel.ZIndex 因为 ComboBox 不包含属性 Panel.
  • Grid 类派生自 Panel 类并包含 ZIndex 属性。 Combobox 在 Grid 中,因此您可以将其设置为类似于 Grid.Row。
  • 但我必须使用顶级 Grid 对象以某种方式更改某些 ComboBox ZIndex??
  • 在您的情况下,Grid 是顶级对象,但更重要的是它是 Comboboxes 的父对象。您将元素定位在其父元素中 - 在本例中为 Grid。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 2013-01-14
  • 2013-01-12
相关资源
最近更新 更多