【问题标题】:WPF Expander won't expand left when inside CanvasWPF Expander 在 Canvas 内不会向左扩展
【发布时间】:2012-05-05 05:18:37
【问题描述】:

我有一个 4 列的网格。第一列是一个 ZIndex 为 99 的 Canvas,里面是一个扩展器。展开方向设置为 RIGHT。当我单击标题时,扩展器会展开第 2 列的 OVER TOP ......这正是我想要的。我正在尝试在第 4 列中复制这个(仅相反的方向),以便在展开时,它将显示在第 3 列上。即使我已将第二个扩展器的 ExpandDirection 标记为“左”,它仍然会扩展为右边,然后离开屏幕。

这是工作扩展器:

<Canvas Grid.Column="0" Panel.ZIndex="99" Grid.RowSpan="4" VerticalAlignment="Stretch" Margin="0,5"> 
    <Expander ExpandDirection="Right" Style="{DynamicResource OptionsExpanderStyle}" VerticalAlignment="Stretch" Height="{Binding ActualHeight, RelativeSource={RelativeSource AncestorType={x:Type Canvas}}}">
        <Border BorderBrush="Black" BorderThickness="0,0,2,0">
            <Grid Background="White">

            </Grid>
        </Border>
    </Expander>
</Canvas>

这是损坏的扩展器:

<Canvas x:Name="rightCanvas" Panel.ZIndex="99" Grid.RowSpan="4" Grid.Column="3" Margin="0,5">
    <Expander ExpandDirection="Left" Style="{DynamicResource OptionsExpanderStyle}" HorizontalAlignment="Right" VerticalAlignment="Stretch" Height="{Binding ActualHeight, RelativeSource={RelativeSource AncestorType={x:Type Canvas}}}">
        <Border BorderBrush="Black" BorderThickness="2,0,0,0">
            <Grid Background="White" Width="150">

            </Grid>
        </Border>
    </Expander>
</Canvas>

【问题讨论】:

  • @NicolasRepiquet,这是我发现允许我扩展第 2 列和第 3 列中的其余控件的唯一方法。还有其他方法吗?简单地将 ZIndex 放在扩展器上是行不通的。

标签: c# wpf xaml expander


【解决方案1】:

不要使用画布。

试试这样的:

<Grid>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <TextBlock Background="LightBlue"
            TextAlignment="Center" Text="Left Column"/>
        <TextBlock Grid.Column="1" Background="LightCoral" 
            TextAlignment="Center" Text="Right Column"/>
    </Grid>
    <Expander Background="LightGray" ExpandDirection="Right"
        Header="LeftMenu" VerticalAlignment="Top" HorizontalAlignment="Left">
        <StackPanel Width="200">
            <TextBlock Text="Some menu stuff"/>
            <TextBlock Text="Some more"/>
        </StackPanel>   
    </Expander>
    <Expander Background="LightGray" ExpandDirection="Left"
        Header="RightMenu" VerticalAlignment="Top" HorizontalAlignment="Right">
        <StackPanel Width="200" >
            <TextBlock Text="Some menu stuff"/>
            <TextBlock Text="Some more"/>
        </StackPanel>
    </Expander>
</Grid>

【讨论】:

  • 我同意。 Expander 可以正确展开,但会在父级->画布内移动。
  • 你真的应该摆脱所有这些画布:D
  • 谁能解释为什么我不应该使用画布(除了它不适合我的事实)。我正在实施上述答案,但我只是好奇为什么人们说我不应该使用画布。
  • 来自WinForms 或其他绝对定位UI 框架的人喜欢画布并经常使用它。大多数时候它会导致不理解和布局噩梦。当你真的需要这种绝对定位功能时,应该很少使用画布。通常情况下,有一种避免它的好方法。
  • @NicolasRepiquet,感谢您的回答。是的,我从不使用 Canvas,但它在这种情况下有效(或者,至少有一半有效)。不过,您的解决方案更好。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多