WPF ListView выключает выбор

Простой путь состоит в том, чтобы просто иметь файл свойств, например, myapp.properties, со всеми Вашими настройками в. Это не очень усовершенствованный способ сделать настройки, но это достаточно, или Вы можете иметь свой собственный XML базирующаяся установка или получить их от базы данных, и т.д.

111
задан ROMANIA_engineer 7 January 2018 в 10:49
поделиться

3 ответа

Комментарий Пер Мартина Коничека, чтобы полностью отключить выбор элементов самым простым способом:

<ListView>
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="Focusable" Value="false"/>
        </Style>
    </ListView.ItemContainerStyle>
    ...
</ListView>

Однако, если вам по-прежнему требуются функциональные возможности ListView, например возможность выбора элемента, вы можете визуально отключить стилизацию выбранного элемента следующим образом:

Вы можете сделать это числом различных способов, от изменения ControlTemplate ListViewItem до простой установки стиля (намного проще). Вы можете создать стиль для ListViewItems с помощью ItemContainerStyle и «выключить» фон и кисть границы, когда они выбраны.

<ListView>
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Style.Triggers>
                <Trigger Property="IsSelected"
                         Value="True">
                    <Setter Property="Background"
                            Value="{x:Null}" />
                    <Setter Property="BorderBrush"
                            Value="{x:Null}" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListView.ItemContainerStyle>
    ...
</ListView>

Кроме того, если у вас нет другого способа уведомить пользователя, когда элемент выбран (или просто для тестирования), вы можете добавить столбец для представления значения:

<GridViewColumn Header="IsSelected"
                DisplayMemberBinding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}, Path=IsSelected}" />
128
ответ дан 24 November 2019 в 03:01
поделиться

В дополнение к приведенному выше решению ... Я бы использовал MultiTrigger, чтобы подсветка MouseOver продолжала работать после выбора, так что ваш стиль ListViewItem будет:

        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Style.Triggers>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsSelected" Value="True" />
                            <Condition Property="IsMouseOver" Value="False" />
                        </MultiTrigger.Conditions>
                        <MultiTrigger.Setters>
                            <Setter Property="Background" Value="{x:Null}" />
                            <Setter Property="BorderBrush" Value="{x:Null}" />
                        </MultiTrigger.Setters>
                    </MultiTrigger>
                </Style.Triggers>
            </Style>
        </ListView.ItemContainerStyle>
8
ответ дан 24 November 2019 в 03:01
поделиться

Ответ Мура не работает, и страница здесь:

Указание цвета выделения, выравнивания содержимого и цвета фона для элементов в ListBox

объясняет, почему он не может работать.

Если ваш список содержит только базовый текст, простейший способ решить проблему - использовать прозрачные кисти.

<Window.Resources>
  <Style TargetType="{x:Type ListViewItem}">
    <Style.Resources>
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#00000000"/>
      <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#00000000"/>
    </Style.Resources>
  </Style>
</Window.Resources>

Это приведет к нежелательным результатам, если ячейки списка содержат элементы управления, такие как поля со списком, поскольку они также меняют их цвет. Чтобы решить эту проблему, необходимо переопределить шаблон элемента управления.

  <Window.Resources>
    <Style TargetType="{x:Type ListViewItem}">
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type ListViewItem}">
            <Border SnapsToDevicePixels="True" 
                    x:Name="Bd" 
                    Background="{TemplateBinding Background}" 
                    BorderBrush="{TemplateBinding BorderBrush}" 
                    BorderThickness="{TemplateBinding BorderThickness}" 
                    Padding="{TemplateBinding Padding}">
              <GridViewRowPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                                    VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
                                    Columns="{TemplateBinding GridView.ColumnCollection}" 
                                    Content="{TemplateBinding Content}"/>
            </Border>
            <ControlTemplate.Triggers>
              <Trigger Property="IsEnabled" 
                       Value="False">
                <Setter Property="Foreground" 
                        Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
              </Trigger>
            </ControlTemplate.Triggers>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </Window.Resources>
31
ответ дан 24 November 2019 в 03:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: