【问题标题】:GridviewColumn width adjusts for first entry only; when set to auto - WPFGridviewColumn 宽度仅针对第一个条目进行调整;当设置为自动 - WPF
【发布时间】:2012-10-02 03:12:57
【问题描述】:

我正在努力实现以下目标
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,则列宽不会扩大。
谢谢。

【问题讨论】:

    标签: wpf listview width gridviewcolumn


    【解决方案1】:

    您已经明确设置了 gridVIewColumn 的宽度。它永远不会增长超过 212。将 GridViewColumn.Width 与 GridViewColumn.Header.ActualWidth 绑定。那么它应该是动态的。

    【讨论】:

      【解决方案2】:

      编辑:如果您的 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-02-23
        • 2017-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-23
        • 2017-02-21
        相关资源
        最近更新 更多