Подтвердить что ты не робот

Запретить пользователю изменять размеры столбцов с помощью WPF ListView

Как я могу запретить пользователю изменять размеры GridViewColumns с помощью элемента управления ListView?

4b9b3361

Ответ 1

я нашел решение и, вероятно, когда-нибудь он поможет кому-то другому;)

вам необходимо переопределить шаблон управления GridViewColumnHeader (шаблон по умолчанию здесь) и удалить PART_HeaderGripper из шаблона в чтобы предотвратить изменение размеров столбцов.

существует другое решение, которое включает подклассификацию GridViewColumn, описанную здесь здесь. для целей представления я предпочитаю только xaml решения, хотя

Ответ 2

Для тех, кто ищет более быстрый и простой ответ.

Установите значение IsEnabled в значение False в столбцеHeaderContainerStyle. Это предотвратит изменение размера пользователя.

Вот так:

<GridView.ColumnHeaderContainerStyle>
  <Style TargetType="{x:Type GridViewColumnHeader}">
       <Setter Property="IsEnabled" Value="False"/>
  </Style>
</GridView.ColumnHeaderContainerStyle>

Если вы хотите исправить отключенный серый цвет, добавьте триггер свойства IsEnabled и исправьте то, что вам нужно.

<GridView.ColumnHeaderContainerStyle>
   <Style TargetType="{x:Type GridViewColumnHeader}">
       <Setter Property="IsEnabled" Value="False"/>
    <Style.Triggers>
       <Trigger Property="IsEnabled" Value="False">                
          <Setter Property="TextElement.Foreground" Value="Black"/>                       
       </Trigger>
    </Style.Triggers>
  </Style>
</GridView.ColumnHeaderContainerStyle>

Этот ответ может быть не таким элегантным, как другие опубликованные; но в моем случае все, что мне было нужно, это быстрый способ сделать это.

Надеюсь, это поможет кому-то.

Ответ 3

Ответ Darkonekt хорош, однако может быть предпочтительнее установить IsHitTestVisible на false вместо IsEnabled. Это имеет преимущество не поглаживать заголовки.

<GridView.ColumnHeaderContainerStyle>
    <Style BasedOn="{StaticResource {x:Type GridViewColumnHeader}}" TargetType="{x:Type GridViewColumnHeader}">
        <Setter Property="IsHitTestVisible" Value="False"/>
    </Style>
</GridView.ColumnHeaderContainerStyle>

Ответ 4

Я смог сделать что-то подобное с инструкциями в этом сообщении

http://blogs.msdn.com/b/atc_avalon_team/archive/2006/04/11/573037.aspx

Мне не удалось использовать полное решение XAML, так как я строю все в своем коде позади из-за его динамики. Работала отлично с первой попытки.