簡體   English   中英

如何使用GridSplitter檢索WPF網格中的列寬?

[英]How do I retrieve column width in a WPF Grid using a GridSplitter?

我需要向用戶顯示兩個列表框-在窗口的任一側-並允許用戶選擇為每個列表框分配多少屏幕空間。 通過以下代碼,我已經取得了很多成就:

<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屬性)。

我可以想到兩種解決方案。

1.使用可用的不同綁定模式以及WidthActualWidth屬性。

<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="{Binding Path=FirstColumnWidth, Mode=OneTime}" />
        <ColumnDefinition Width="3" />
        <ColumnDefinition Width="{Binding Path=SecondColumnWidth, Mode=OneTime}" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid Grid.Column="0" ActualWidth="{Binding Path=FirstColumnWidth, Mode=OneWayToSource}">
        <ListBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
    </Grid>
    <GridSplitter Grid.Column="1" Width="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
    <Grid Grid.Column="2" ActualWidth="{Binding Path=SecondColumnWidth, Mode=OneWayToSource}">
        <ListBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
    </Grid>
</Grid>

2.使用附帶的行為模式( CodeProject上的教程 )覆蓋網格拆分器的當前/默認行為。 我明天在辦公桌前將發布此代碼示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM