Как избавиться от границы вокруг выбранного элемента ListBox в WPF? - PullRequest
0 голосов
/ 16 января 2019

У меня есть ListBox, заполненный яблоками.Я хотел изменить выбранный элемент, чтобы иметь только сплошной фон без рамки.Я последовал этому предложению:

Вопрос # 146269: изменить шаблон данных Wpf для элемента списка, если он выбран

Вот мой xaml:

<UserControl.Resources>
    <ResourceDictionary>
        <DataTemplate x:Key="AppleItemTemplate">
            <Border Opacity="1" Padding="10,5">
                    <TextBlock Foreground="{DynamicResource PrimaryTextColor}">
                    <TextBlock.Text>
                        <Binding Path="DisplayName"/>
                    </TextBlock.Text>
                </TextBlock>
            </Border>
        </DataTemplate>
        <DataTemplate x:Key="AppleItemTemplateSelected">
            <Border BorderThickness="0" BorderBrush="Transparent" Padding="10,5" Background="{DynamicResource LeftSidebarBGColorHighlight}">
                <TextBlock Foreground="{DynamicResource PrimaryTextColor}">
                    <TextBlock.Text>
                        <Binding Path="DisplayName"/>
                    </TextBlock.Text>
                </TextBlock>
            </Border>
        </DataTemplate>
        <Style TargetType="{x:Type ListBoxItem}" x:Key="AppleContainerStyle">
            <Setter Property="ContentTemplate" Value="{DynamicResource AppleItemTemplate}"/>
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="ContentTemplate" Value="{DynamicResource AppleItemTemplateSelected}"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ResourceDictionary>
</UserControl.Resources>

<ListBox ItemsSource="{Binding Apples}"
         SelectedItem="{Binding SelectedApple}"
         ItemContainerStyle="{StaticResource AppleContainerStyle}"

         Background="{DynamicResource LeftSidebarBGColor}"
         BorderThickness="0"
         ScrollViewer.HorizontalScrollBarVisibility="Disabled" HorizontalContentAlignment="Stretch"
         >

    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

КогдаЯ запускаю программу и выбираю яблоко, я получаю это:

Selected Apple

Вы можете видеть, что XAML работает, чтобы применить серый фоновый цвет.Но есть белая граница, которой не должно быть.Если вы присмотритесь, на левой и правой сторонах коробки также есть тонкие серые полосы внутри границы.(печальное лицо)

Кто-нибудь знает, что не так с моим шаблоном данных или настройками ListBox?

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Ответ МаркФельдмана сработал, но возникла проблема с событием щелчка мышью. При использовании элемента Padding on the Border щелчки мыши не регистрируются при щелчке в области дополнения между текстовыми элементами. Чтобы исправить это, я заменил Border на StackPanel и переместил Padding на TextBlock. Заполнение самого текстового блока правильно регистрирует щелчок.

Окончательный xaml:

<UserControl.Resources>
<ResourceDictionary>
    <ControlTemplate x:Key="AppleItemTemplate">
        <StackPanel Opacity="1">
                <TextBlock Padding="10,5" Foreground="{DynamicResource PrimaryTextColor}">
                <TextBlock.Text>
                    <Binding Path="DisplayName"/>
                </TextBlock.Text>
            </TextBlock>
        </StackPanel>
    </ControlTemplate>
    <ControlTemplate x:Key="AppleItemTemplateSelected">
        <StackPanel Background="{DynamicResource LeftSidebarBGColorHighlight}">
            <TextBlock Padding="10,5" Foreground="{DynamicResource PrimaryTextColor}">
                <TextBlock.Text>
                    <Binding Path="DisplayName"/>
                </TextBlock.Text>
            </TextBlock>
        </StackPanel>
    </ControlTemplate>
    <Style TargetType="{x:Type ListBoxItem}" x:Key="AppleContainerStyle">
        <Setter Property="Template" Value="{DynamicResource AppleItemTemplate}"/>
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Template" Value="{DynamicResource AppleItemTemplateSelected}"/>
                <Setter Property="BorderThickness" Value="0"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</ResourceDictionary>

0 голосов
/ 16 января 2019

Если вы просто хотите удалить границу выбранного элемента, попробуйте следующее:

Добавьте <Setter Property="BorderThickness" Value="0"/> в триггер "IsSelected".

В моей демонстрации я обнаружил, что это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...