【发布时间】:2021-04-13 12:13:10
【问题描述】:
我正在尝试构建一个 wpf 应用程序,该应用程序有两个扩展器,一个在左侧,另一个在右侧,并且在它们之间有网格。扩展器必须能够相应地调整自身大小,自动调整它们之间的网格大小,如下所示。
通过在下方粘贴一些 XAML,我能够调整左侧扩展器的大小,但右侧扩展器和网格未显示。
<Grid>
<!--<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>-->
<DockPanel>
<Expander DockPanel.Dock="Left" x:Name="ProjectsExpander" Header="Projects" IsExpanded="True" ExpandDirection="Right" HorizontalAlignment="Stretch">
<Grid Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Expander}},Path=ActualWidth}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="2"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<something here/>
</Grid>
<GridSplitter Grid.Column="1" Width="2" Background="{DynamicResource BorderBrush}" ResizeBehavior="PreviousAndCurrent" ResizeDirection="Columns"/>
</Grid>
</Expander>
<Grid DockPanel.Dock="Left" Background="Green" HorizontalAlignment="Center" VerticalAlignment="Stretch">
<TextBlock Text="Test"/>
</Grid>
<Expander DockPanel.Dock="Right" VerticalAlignment="Stretch" Header="Properties" ExpandDirection="Left" HorizontalAlignment="Right" Width="235">
<Grid Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Expander}},Path=ActualWidth}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<GridSplitter Grid.Column="0" Width="2" Background="{DynamicResource BorderBrush}" ResizeBehavior="PreviousAndCurrent" ResizeDirection="Columns"/>
<Border Grid.Column="1" Width="130"/>
</Grid>
</Expander>
</DockPanel>
</Grid>
如您所见,我使用 DockPanel 来停靠控件,但我曾尝试使用带有 ColumnDefinitions 的 Grid 来停靠它们,我得到了相同的结果。那么谁能告诉我如何让应用程序在每一侧都有两个扩展器,中间有一个网格,并且能够调整扩展器的大小,从而也自动调整网格的大小?
【问题讨论】:
-
老问题stackoverflow.com/questions/35455094/…。但从未收到答复。
-
您的 Width 绑定看起来很疯狂。 :) 请说清楚。您需要调整扩展器本身的大小还是只调整其内容?
-
我想调整它的内容。
-
为什么我的宽度绑定看起来很疯狂?默认情况下,宽度不会拉伸以适应其父扩展器,因此我必须进行这样的绑定。
-
1) 您设置了对只读属性的绑定,同时尝试通过更改源来对其进行操作。 2)您为父元素设置了一个锚点,该锚点始终大于其内容。内容采用父级的大小。父母因此而扩大。这再次导致内容的变化。结果是循环到无穷大。