0
基本上我想Canvas
的行爲像一個StackPanel
。那麼如何根據Canvas.Bottom
設置另一個元素Canvas.Top=""
?基於另一個元素的畫布位置
背景:試圖製作一個Expander
,當它展開時它會超越其他元素。使用Canvas
ZIndex
來計算是最好的方法。所以我創造了這個:
<StackPanel Orientation="Vertical" >
<Canvas Height="{Binding ActualHeight, ElementName=MyExpander}">
<Expander Panel.ZIndex="1" Name="MyExpander" Header="Header" >
<StackPanel Background="LightGray">
<TextBlock Text="Some text" />
<TextBlock Text="Some text" />
<TextBlock Text="Some text" />
<TextBlock Text="Some text" />
<TextBlock Text="Some text" />
<TextBlock Text="Some text" />
</StackPanel>
</Expander>
<StackPanel Panel.ZIndex="0" Canvas.Top="20" Margin="0,5,0,0">
<Button Content="Button1" />
<Button Content="Button2" />
<Button Content="Button3" />
</StackPanel>
</Canvas>
</StackPanel>
現在這個完美的作品的問題是,Canvas.Top="20"
是硬編碼到XAML。這意味着如果字體增加(用戶在Windows中增加字體大小),那麼StackPanel
的一部分將在Expander
下。我嘗試這樣做:
Canvas.Bottom="{Binding (Canvas.Bottom),ElementName=MyExpander}"
問題的存在就是價值爲Canvas.Bottom
爲MyExpander
是NaN
這樣就不會去上班。
僅供參考如果有更好的方法來做Expander
擴大在我打開的元素頂部以及。
謝謝