Сохранение элемента просмотра списка выделенным, когда элемент управления теряет фокус - PullRequest
0 голосов
/ 10 июля 2019

Я создал функциональность вкладки из списка.У меня проблема в том, что выбранный элемент теряет фокус, когда я щелкаю вдали от элемента управления.Я хочу, чтобы выбранный элемент оставался выделенным, чтобы пользователь знал, на какой вкладке (listviewitem) они находятся в данный момент.

Примечание: я использую MaterialDesign для стиля.

Вот мой код:

<ListView x:Name="lvTabs"
    ItemsSource="{Binding tabItems}" ItemTemplate=" 
    {StaticResource TabListViewItemTemplate}">

                <ListView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Horizontal"></StackPanel>
                    </ItemsPanelTemplate>
                </ListView.ItemsPanel>
            </ListView>

Ответы [ 2 ]

1 голос
/ 12 июля 2019

Надеюсь, я понимаю, что вы просили. Мое предлагаемое решение: Ресурсы:

  <Style TargetType="ListViewItem" x:Key="ItemStyle">
        <Setter Property="Background" Value="Red"/>

        <Style.Triggers>
            <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true">
                <Setter Property="Background" Value="Blue"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListViewItem}">
                            <Border Name="Border" 
                                    BorderBrush="{TemplateBinding BorderBrush}" 
                                    BorderThickness="{TemplateBinding BorderThickness}" 
                                    Background="{TemplateBinding Background}">
                                <ContentPresenter Content="{TemplateBinding Content}" 
                                                  ContentTemplate="{TemplateBinding ContentTemplate}"
                                                  Margin="{TemplateBinding Padding}" />
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </DataTrigger>
        </Style.Triggers>
    </Style>

   <DataTemplate x:Key="TabListViewItemTemplate">
        <TextBlock Text="{Binding }" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </DataTemplate>

И ListView:

 <ListView x:Name="lvTabs" Width="100" Height="200"
              HorizontalAlignment="Left" VerticalAlignment="Top"
              ItemsSource="{Binding }" ItemTemplate="{StaticResource TabListViewItemTemplate}"
              ItemContainerStyle="{StaticResource ItemStyle}" >

        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal"></StackPanel>
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
    </ListView>

Я добавил массив строк для проверки решения.

 this.DataContext = new string[] { "Tab1", "Tab2" };

Он должен работать с любым DataTemplate, так как он меняет только фон.

0 голосов
/ 11 июля 2019

ListView потеряет фокус, когда другой элемент управления окажется в фокусе.Этого нельзя избежать.Но вы можете изменить цвет выбранного элемента ListView, когда он не имеет фокуса. Вам нужно установить цвет выбранного элемента ListView без фокуса.Просто установите неактивный цвет выделения, который будет выделять выбранный элемент списка, когда он теряет фокус.

<ListView.Style>
    <Style TargetType="{x:Type ListViewItem}">
       <Style.Resources>
           <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Red"/>
       </Style.Resources>
    </Style>
</<ListView.Style>
...