【问题标题】:How do I hide a control under another one?如何将一个控件隐藏在另一个控件下?
【发布时间】:2018-10-02 16:59:12
【问题描述】:

所以我试图隐藏一个控件,我有一个我的第二个 Column 定义,但由于某种原因,使用 ZIndex 属性没有工作。

那么,将我的 StackPanel 隐藏在第 0 列网格下的第 1 列中的最有效方法是什么

<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>

        <Grid Column="0">
            <Grid Background="Orange"/>
        </Grid>

        <Grid Column="1">
            <StackPanel Width="100"
                        Height="100"
                        Background="#212121" Margin="-102,158,266,161"/>
        </Grid>

    </Grid>

【问题讨论】:

  • 您能否发布整个 xaml 文件或至少部分存在可重现问题?
  • @DipenShah 这是整个 XAML 文档。我清楚地解释了我想要做什么。在第 0 列的网格下隐藏第 1 列中的 StackPanel
  • 我的朋友,如果它们位于不同的 Grid 列中,您无法将控制权转移到另一个上。将列的宽度设置为 0 或使用同一列并使用 ZIndex 将一个控件置于另一个控件之上。
  • @DipenShah 哦,真的吗? i.imgur.com/8J2nrLB.png
  • 当然您可以设置边距,但 AFAIK 框架会剪切超出列边界的内容。但我真的很感兴趣,所以看看如何在你的用例中使用 ZIndex!

标签: c# .net wpf


【解决方案1】:

这里可以设置 ZIndex。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>

    <Grid Column="0" Panel.ZIndex="2">
        <Grid Background="Orange"/>
    </Grid>

    <Grid Column="1" Panel.ZIndex="1">
        <StackPanel Width="100"
                    Height="100"
                    Background="#212121" Margin="-102,158,266,161"/>
    </Grid>

</Grid>

如果只想隐藏它,你可以设置Visibility

<Grid Visibility="Hidden"/>

您还可以通过更改 XAML 中网格的顺序来控制 ZIndex。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>

    <Grid Column="1">
        <StackPanel Width="100"
                Height="100"
                Background="#212121" Margin="-102,158,266,161"/>
    </Grid>

    <Grid Column="0" Width="150">
        <Grid Background="Orange"/>
    </Grid>

</Grid>

如上所述,如果你真的想跨越到列,你应该设置 Grid.ColumnSpan &lt;Grid Column="0" Grid.ColumnSpan="2"&gt;

【讨论】:

  • 使用 XAML,我想在第 0 列的网格下隐藏第 1 列中的 StackPanel 我已经尝试使用 ZIndex 属性,正如我解释的那样。但这没有用。如果我要在后面编写代码,我不会使用 WPF。
  • @MarkDenom 您对背后的代码有何看法? WPF 和 no-code-behind 口头禅:没有属于 ViewModel 或 Model 的逻辑代码。但是演示所需的代码(例如,将画布涂成红色)不属于 ViewModel 或 Model,因此它必须位于 View 端。您可以使用 AttachedProperty 注入代码(这是大多数情况下的方法),但它是 View 端的代码。
  • @Mark Denom 你能准确解释什么不起作用吗?您希望看到什么结果?还有为什么投反对票。我从来没有打算让我的答案需要后面的代码。
猜你喜欢
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多