ウィンドウに 3 列のグリッドがあり、最初の列に GridSplitter があります。最初の列の MaxWidth を親 Window または Page Width
(またはActualWidth
) の 3 分の 1 に設定したいのですが、可能であれば 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 をウィンドウ幅の 3 分の 1 (またはそのようなもの) に設定することで、これを防止したいと考えています。これはコード ビハインドで非常に簡単に実行できますが、「XAML のみ」で実行するにはどうすればよいですか?
編集: David Schmitt は、バインドの代わりに 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>