2017-01-01 68 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>