Отключить FocusStyle элемента ListViewItem в ListView в С#

Я создаю ListView во время выполнения и постоянно его заполняю. Проблема в том, что я хочу отключить изменение цвета при наведении курсора на элемент или его выборе.

Каждый ListViewItem не фокусируется. Таким образом, изменение цвета не сохраняется и отображается только при наведении курсора на элемент. Я попытался отключить это, создав свой единственный стиль, но, к сожалению, это не сработало, как я надеялся.

Я использовал этот стиль

Setter setter = new Setter()
{
    Property = Control.BackgroundProperty,
    Value = null
};
Setter setter1 = new Setter()
{
    Property = Control.BorderBrushProperty,
    Value = null
};

Trigger trigger = new Trigger()
{
     Property = ListBoxItem.IsSelectedProperty,
     Value = true,
     Setters = { setter, setter1 }
};

Style style = new Style()
{
     Triggers = { trigger }
};

Я также попытался установить для ListView.FocusVisualStyle значение null, но у меня также не было результатов.

вы можете установить Enabled=false для просмотра списка

Sergey Anisimov 19.06.2019 08:20

Я бы предложил использовать Transparent вместо null в качестве значения.

Gaurang Dave 19.06.2019 08:23

Параметр @irategenius включен = false также отключает функцию прокрутки

CaptainLama 19.06.2019 08:34

@GaurangDave, где мне применить стиль. Я пробовал ListViewItem.FocusVisualStyle, ListView.ItemContainerStyle и ListView.FoucsVisualStyle. Ни один из них ничего не изменил

CaptainLama 19.06.2019 08:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
193
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ну есть 2 варианта

1) если вам не нужно выбирать элементы: установите для IsHitTestVisible значение false

2) сделать свой собственный стиль

<!--Default LitsView-->
<Style TargetType = "ListView">
    <Setter Property = "Background" Value = "{StaticResource YOUR_BACKGROUND_COLOR}"/>
</Style>

<!--Default LitsViewItem-->
<Style x:Key = "FocusVisual">
    <Setter Property = "Control.Template">
        <Setter.Value>
            <ControlTemplate>
                <Rectangle Margin = "2" SnapsToDevicePixels = "true" Stroke = "{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness = "1" StrokeDashArray = "1 2"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<Style TargetType = "{x:Type ListViewItem}">
    <Setter Property = "SnapsToDevicePixels" Value = "True"/>
    <Setter Property = "Padding" Value = "4,1"/>
    <Setter Property = "HorizontalContentAlignment" Value = "{Binding HorizontalContentAlignment, RelativeSource = {RelativeSource AncestorType = {x:Type ItemsControl}}}"/>
    <Setter Property = "VerticalContentAlignment" Value = "{Binding VerticalContentAlignment, RelativeSource = {RelativeSource AncestorType = {x:Type ItemsControl}}}"/>
    <Setter Property = "Background" Value = "Transparent"/>
    <Setter Property = "BorderBrush" Value = "Transparent"/>
    <Setter Property = "BorderThickness" Value = "1"/>
    <Setter Property = "FocusVisualStyle" Value = "{StaticResource FocusVisual}"/>
    <Setter Property = "Template">
        <Setter.Value>
            <ControlTemplate TargetType = "{x:Type ListViewItem}">
                <Border x:Name = "Bd" BorderBrush = "{TemplateBinding BorderBrush}" BorderThickness = "{TemplateBinding BorderThickness}" Background = "{TemplateBinding Background}" Padding = "{TemplateBinding Padding}" SnapsToDevicePixels = "true">
                    <ContentPresenter HorizontalAlignment = "{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels = "{TemplateBinding SnapsToDevicePixels}" VerticalAlignment = "{TemplateBinding VerticalContentAlignment}"/>
                </Border>
                <ControlTemplate.Triggers>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property = "IsMouseOver" Value = "True"/>
                        </MultiTrigger.Conditions>
                        <Setter Property = "Background" TargetName = "Bd">
                            <Setter.Value>
                                <SolidColorBrush Color = "{StaticResource YOUR_COLOR}" Opacity = "0.3"/>
                            </Setter.Value>
                        </Setter> 
                        <Setter Property = "BorderBrush" TargetName = "Bd" Value = "{StaticResource YOUR_COLOR}"/>
                    </MultiTrigger>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property = "Selector.IsSelectionActive" Value = "True"/>
                            <Condition Property = "IsSelected" Value = "True"/>
                        </MultiTrigger.Conditions>
                        <Setter Property = "Background" TargetName = "Bd" Value = "{StaticResource YOUR_COLOR}"/>
                        <Setter Property = "BorderBrush" TargetName = "Bd" Value = "{StaticResource YOUR_COLOR}"/>
                    </MultiTrigger>
                    <Trigger Property = "IsEnabled" Value = "False">
                        <Setter Property = "TextElement.Foreground" TargetName = "Bd" Value = "{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

просто установка IsHitTestVisible=false работает для меня. Спасибо

CaptainLama 19.06.2019 11:00

@CaptainLama, вы можете использовать xaml в RunTime, просто сделайте это в своем коде smt.Style = Application.Current.FindResource("YOUR_STYLE_KEY") as Style

Zer0 19.06.2019 11:21

Попробуйте это в своем коде xaml...

<ListView ...>
    <ListView.ItemContainerStyle>
        <Style TargetType = "{x:Type ListViewItem}">
            <Setter Property = "HorizontalAlignment" Value = "Left"/>
            <Setter Property = "Template">
                <Setter.Value>
                    <ControlTemplate TargetType = "{x:Type ListViewItem}">
                        <ContentPresenter />
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

Я не могу использовать xaml, потому что все генерируется во время выполнения.

CaptainLama 19.06.2019 10:59

Другие вопросы по теме