2017-01-01 69 views
0

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

我的问题是关于WPF中的面板。在Winform中,比方说,我有两个面板:PanelA和PanelB。通过将PanelB设置为可见并将PanelA设置为隐藏,我可以将PanelB置于PanelA之上。通过这样做,PanelA上的所有控件都被禁用,这意味着控件对用户不可见,并且不能通过点击TAB来选择。

但是,在WPF中,我无法找到实现相同效果的等效控件。我已经尝试过Rectangle,但是如果用户打开TAB,仍然可以选择矩形下方的控件。

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

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

+1

设置的IsEnabled为假父容器上内禁止一切。 –

+0

['StackPanel'](https://msdn.microsoft.com/en-us/library/system.windows.controls.stackpanel(v = vs.110).aspx),['WrapPanel'](https:/ /msdn.microsoft.com/en-us/library/system.windows.controls.wrappanel(v=vs.110).aspx)和['Grid'](https://msdn.microsoft.com/en-我们/图书馆/ system.windows.controls.grid(v = vs.110).aspx)服务于此目的。它们都有一个“IsEnabled”属性,当所有的孩子都失效时会禁用它。我们在XAML中对布局进行了不同的考虑,因此您需要在每个容器控件上阅读MSDN。我已经链接了每个MSDN页面。 –

+0

您也可以使用ZIndex进行游戏,而这两个面板均可见并启用。在PanelA上将ZIndex设置为1,在PanelB上将ZIndex设置为2将导致PanelB在PanelA“上方”。 –

回答

0

我不知道是否比将整个面板的IsEnabled属性设置为false更容易,但添加到WPF中的网格的第二个元素最终取决于第一个元素。所以,如果你想隐藏,并有效地禁用一个矩形,你可以将其添加到网格,然后另一元素添加到同一电网,例如:

<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>