【问题标题】:Panels in WPF and WinformWPF 和 Winform 中的面板
【发布时间】:2017-01-01 17:57:47
【问题描述】:

我在制作 Winform 应用程序方面有一些经验,但在 WPF 中没有。

我的问题是关于 WPF 中的面板。

例如,在 Winform 中,我有两个面板:PanelA 和 PanelB。我可以通过将 PanelB 设置为可见并将 PanelA 设置为隐藏来将 PanelB 放在 PanelA 的顶部。这样一来,PanelA 上的所有控件都将被禁用,这意味着这些控件对用户不可见,也无法通过按 TAB 来选择。

但是,在 WPF 中,我找不到等效的控件来实现相同的效果。我试过 Rectangle,但是如果用户按 TAB,仍然可以选择下面 Rectangle 上的控件。

我想要的东西不仅可以在视觉上阻止控件(按钮等),还可以防止用户通过按 TAB 来选择它们。

我知道有一种方法可以通过在 WPF 中将 IsEnabled 属性设置为 false 来禁用控件。但是有没有更简单的方法?像 Winform 中的 Panel 控件?

【问题讨论】:

  • 在父容器上将 IsEnabled 设置为 false 以禁用其中的所有内容。
  • StackPanelWrapPanelGrid 用于此目的。它们都有一个IsEnabled 属性,当为假时禁用所有子级。我们在 XAML 中以不同的方式考虑布局,因此您确实需要阅读有关每个容器控件的 MSDN。我已经为每个链接了 MSDN 页面。
  • 您还可以在两个面板都可见并启用时使用 ZIndex。将 PanelA 上的 ZIndex 设置为 1,将 PanelB 上的 ZIndex 设置为 2 将导致 PanelB “高于” PanelA。
  • 谢谢大家的回复。看起来我必须使用“IsEnabled”属性和 ZIndex。 :)
  • @KaKaShi_CantAim ZIndex 不是做这些事情的最佳方式。使用IsEnabled 启用/禁用,并使用Visibility 属性隐藏/显示(以及值转换器或样式触发器)。

标签: c# .net wpf winforms


【解决方案1】:

我不知道这是否比将整个 Panel 的 IsEnabled 属性设置为 false 更容易,但是您在 WPF 中添加到 Grid 的第二个元素最终位于第一个元素之上。因此,如果您想隐藏并有效禁用 Rectangle,可以将其添加到 Grid,然后将另一个元素添加到同一个 Grid,例如:

<Grid>
    <Rectangle Width="100" Height="100" Fill="Green" />
    <!-- This child Grid that contains a Button element will effectively hide the above Rectange -->
    <Grid>
        <Button Content="On top..." />
    </Grid>
</Grid> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    相关资源
    最近更新 更多