0

私は次のことを達成しようとしてい
ます 1. gridview 列の最小幅を何らかの値に設定します。
2. この列にエントリが追加されると、それに応じて列幅が調整されます。
私はそれのために次のコードを書きました

<Grid Background="white" Height="140" Width="auto">
            <ListView Style="{StaticResource stl_lvi_TEXT}" Grid.Row="0" Grid.Column='0' Name="lv_includedInstruments" SelectionMode="Single" Background="White" Height="140" Width="auto" HorizontalAlignment ="Stretch"  VerticalAlignment="Stretch" ItemsSource="{Binding Coll_History}" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectionChanged="lv_includedInstruments_SelectionChanged" TabIndex="18" GotFocus="lv_includedInstruments_GotFocus">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Width="212"  >
                            <GridViewColumn.Header>
                                <GridViewColumnHeader Style="{StaticResource stl_ColumnHeaderStyle}" Content="Groups" HorizontalContentAlignment="Left" Background="white" FontSize="12" BorderBrush="#FF97BADA" BorderThickness="1" Tag="ProtocolVisitTypeForm.ProtocolName"/>
                            </GridViewColumn.Header>
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Width="auto" Tag="{Binding}" Text="{Binding Path=ProtocolVisitTypeForm.ProtocolName}" >
                                    </TextBlock>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>

                    </GridView>
                </ListView.View>
            </ListView>
        </Grid>  

stl_ColumnHeaderStyle は次のとおりです。

<Style x:Key="stl_ColumnHeaderStyle" TargetType="{x:Type GridViewColumnHeader}">
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBlock MinWidth="200" Width="auto" TextWrapping="Wrap" Text="{Binding}"></TextBlock>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

長さ x の文字列の最初のエントリを追加すると、これは正常に機能します。ただし、後続のエントリの長さが x より大きい場合、列の幅は拡張されません。
ありがとうございました。

4

2 に答える 2

0

編集:あなたのColl_Historyが観察可能である場合(そしてあなたがそれに拘束しているのでそうだと思います)、あなたはこのようなことをすることができます:

  • 必要な最小幅をGridViewColumn幅(この場合は212)として設定します
  • 必要がない場合は、ヘッダーデータテンプレートからminWidthを削除します

xamlで:ListViewコントロールのLoadedイベントにハンドラーを追加します:

<ListView Loaded="lv_includedInstruments_Loaded" ... > ... </ListView>

背後にあるコードで

private void lv_includedInstruments_Loaded(object sender, RoutedEventArgs e)
{
    ((sender as ListView).Items as INotifyCollectionChanged).CollectionChanged += ListViewItemsCollectionChanged;
}

void ListViewItemsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    var oldItems = e.OldItems;
    var newItems = e.NewItems;
    if ((oldItems == null || oldItems.Count == 0) && (newItems != null && newItems.Count > 0))
        gridViewColumn.Width = double.NaN;
}
于 2012-10-11T13:07:03.127 に答える
0

すでに gridVIewColumn の幅を明示的に設定しています。212 を超えることはありません。GridViewColumn.Width を GridViewColumn.Header.ActualWidth にバインドします。それは動的でなければなりません。

于 2012-10-11T13:53:20.003 に答える