ユーザーに 2 つのリストボックス (ウィンドウの両側に 1 つずつ) を表示し、それぞれに割り当てる画面スペースをユーザーが選択できるようにする必要があります。私は次のコードでそれを達成しました:
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding FirstColumnWidth}" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ListBox Name="FirstColumn" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="0" Grid.Column="0" />
<GridSplitter Name="gridSplitter1" Width="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="0" Grid.Column="1" />
<ListBox Name="SecondColumn" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="0" Grid.Column="2" />
</Grid>
ただし、バインディングは最初の列の初期幅を取得し、それに応じて両方のサイズを変更しますが、GridSplitter を使用してサイズを変更すると、バインディングが新しい値に置き換えられるだけです。新しい値を取得して永続化するにはどうすればよいですか?
理想的には、ソリューションは MVVM でうまく機能する必要があります。私は Caliburn を使用しており、コードをできるだけきれいに保とうとしています (私のビュー モデルには、現在バインドされている FirstColumnWidth プロパティが含まれています)。