我在一个窗口中有一个 3 列网格,第一列上有一个 GridSplitter。我想将第一列的 MaxWidth 设置为父窗口或页面Width
(或ActualWidth
)的三分之一,如果可能的话,我更愿意在 XAML 中执行此操作。
这是在 XamlPad(或类似)中使用的一些示例 XAML,它显示了我在做什么。
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="Column1" Width="200"/>
<ColumnDefinition x:Name="Column2" MinWidth="50" />
<ColumnDefinition x:Name="Column3" Width="{ Binding ElementName=Column1, Path=Width }"/>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Background="Green" />
<GridSplitter Grid.Column="0" Width="5" />
<Label Grid.Column="1" Background="Yellow" />
<Label Grid.Column="2" Background="Red" />
</Grid>
</Page>
如您所见,右列的宽度与第一列的宽度绑定,因此当您使用拆分器滑动左列时,右列也会这样做:) 如果您将左列向右滑动,最终它将滑过页面/窗口的一半并滑到窗口的右侧,推开第 2 列和第 3 列。
我想通过将第 1 列的 MaxWidth 设置为窗口宽度的三分之一(或类似的东西)来防止这种情况。我可以很容易地在后面的代码中做到这一点,但是如何在“仅 XAML”中做到这一点?
编辑:大卫施密特建议使用 SharedSizeGroup 而不是绑定,这是一个很好的建议。我的示例代码将如下所示:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<Grid IsSharedSizeScope="True">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="Column1" SharedSizeGroup="ColWidth" Width="40"/>
<ColumnDefinition x:Name="Column2" MinWidth="50" Width="*" />
<ColumnDefinition x:Name="Column3" SharedSizeGroup="ColWidth"/>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Background="Green" />
<GridSplitter Grid.Column="0" Width="5" />
<Label Grid.Column="1" Background="Yellow" />
<Label Grid.Column="2" Background="Red" />
</Grid>
</Page>