我需要向用户显示两个列表框——一个在窗口的两侧——并允许用户选择每个列表框有多少屏幕空间。我通过以下代码实现了这么多:
<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 属性)。