Grundsätzlich möchte ich eine Canvas
wie ein StackPanel
handeln. Also, wie setzt man die Canvas.Top=""
basierend auf Canvas.Bottom
eines anderen Elements?Canvas Position basierend auf einem anderen Element
Hintergrund: Versuchen, eine Expander
zu machen, dass bei der Erweiterung wird es über andere Elemente gehen. Unter Verwendung einer Canvas
ZIndex
wäre der beste Weg, dies zu tun. Also habe ich dies:
<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>
Jetzt funktioniert das perfekt das Problem ist, dass Canvas.Top="20"
in das XAML fest einprogrammiert ist. Das heißt, wenn die Schriftart erhöht wird (der Benutzer hat die Schriftgröße in Windows erhöht), dann wird ein Teil der StackPanel
unter der Expander
sein. Ich versuchte dies:
Canvas.Bottom="{Binding (Canvas.Bottom),ElementName=MyExpander}"
Das Problem dafür ist, dass Wert für für Canvas.Bottom
für MyExpander
ist NaN
so ist, dass nicht zur Arbeit gehen.
FYI wenn es eine bessere Möglichkeit gibt, die Expander
erweitert über die Spitze der Elemente zu machen, bin ich dazu auch offen.
dank