2011-10-15 45 views
2

用下面的代碼,我可以證明一個黑色面板與50%的不透明度是如何在每一個矩形的頂部:如何設置Canvas.ZIndex在控件之間繪製黑色面板?

<Grid> 
    <Rectangle Fill="Black" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Opacity="0.5" Canvas.ZIndex="1"/> 
    <Rectangle Fill="Red" Width="200" Height="200" Canvas.ZIndex="0"/> 
    <Grid> 
     <Rectangle Fill="Blue" Width="100" Height="100" Canvas.ZIndex="0"/> 
     <Rectangle Fill="Yellow" Width="50" Height="50" Canvas.ZIndex="1"/> 
    </Grid> 
</Grid> 

它看起來像這樣:

enter image description here

我想在黑色面板上方有黃色矩形,但這似乎是不可能的。

我可以通過將包含藍色和黃色矩形的網格的ZIndex設置爲「1」來實現某種近似。但是這也會提高黑色上方的藍色矩形,這是一個問題。

<Grid> 
    <Rectangle Fill="Black" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Opacity="0.5" Canvas.ZIndex="1"/> 
    <Rectangle Fill="Red" Width="200" Height="200" Canvas.ZIndex="0"/> 
    <Grid Canvas.ZIndex="1"> 
     <Rectangle Fill="Blue" Width="100" Height="100" Canvas.ZIndex="0"/> 
     <Rectangle Fill="Yellow" Width="50" Height="50" Canvas.ZIndex="1"/> 
    </Grid> 
</Grid> 

enter image description here

我怎麼只有黑色上面的黃色矩形? 在我的真實應用程序中,我有用戶控件而不是矩形。我喜歡用一種半黑色遮蓋物遮住所有其他的東西來突出特定的控制。

非常感謝,

回答

1

我不認爲你將能夠與您當前的管制安排來實現。

有控件兩級這裏,「藍色」和「黃色」內網格,然後將「黑」內部控制和「紅與內網共同控制。

ZIndex工程上的控件在相同的「水平」 - 所以你可以確保黃色控制在藍色之上,但是在更高的水平上這些被分組在內部網格下,因此被視爲單個單位。如果你所有的控件都在同一個水平上,這將工作,如果你在內部網格中包含第二個半透明的矩形,你可以得到黃色的頂部但這可能最終導致其他控件太暗。

+0

謝謝克里斯,我結束了這麼做。打破子網格並將它們與父網格合併以使所有對象處於同一級別是有點痛苦的。但至少現在起作用了。 – Houman

0

一種方法可能是不使用簡單的黑色矩形。

改爲使用由兩個矩形組成的路徑。第一個矩形將覆蓋整個區域,第二個矩形將覆蓋可用的控件。

這會創建一個帶有孔的大矩形,您的目標控件可以在其中顯示並接受輸入。

下方正在制定矩形幾何圖形以添加以創建孔,但這非常簡單。

+0

謝謝安東尼,這絕對是一種解決方案,但是在我看來很多工作,並且一旦決議發生變化,最終可能會變得過於頻繁。我最終把網格變成了一個。感謝您指出了替代解決方案。 – Houman

相關問題