Отключите FocusStyle элемента ListViewItem в ListView в c # - PullRequest
1 голос
/ 19 июня 2019

Я создаю 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 на ноль, но ятакже не дал результатов.

Ответы [ 2 ]

1 голос
/ 19 июня 2019

ну есть 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>
0 голосов
/ 19 июня 2019

Попробуйте это в своем коде 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...