WPF - FocusVisualStyle, где я могу применить его? - PullRequest
3 голосов
/ 23 марта 2009

У меня есть UserControl, который в основном оборачивает ListBox, как это -

        <ListBox x:Name="lb" ItemsSource="{Binding ElementName=UC,Path=Pages}"
             Background="{Binding ElementName=UC,Path=Background}"
             BorderBrush="Transparent"
             ScrollViewer.CanContentScroll="False" 
             ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
             ScrollViewer.VerticalScrollBarVisibility="Disabled">

        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal" IsItemsHost="True"/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>

        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid Width="{Binding ElementName=UC,Path=ActualWidth}">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition MinWidth="20"/>
                        <ColumnDefinition/>
                        <ColumnDefinition MinWidth="20"/>
                    </Grid.ColumnDefinitions>
                    <ContentPresenter Grid.Column="1" Content="{Binding}"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

Мне нужно установить FocusVisualStyle на {x:Null}, чтобы скрыть эту функцию, но независимо от того, где я ее применяю, я все равно получаю синий цвет выделения по умолчанию. Я попытался установить его в ListBox, StackPanel и Grid, но безрезультатно.

Любая помощь будет отличной. спасибо.

Ответы [ 2 ]

10 голосов
/ 23 марта 2009

FocusVisualStyle применяет «марширующих муравьев» вокруг сфокусированного элемента, а не цвета фона. Чтобы изменить цвет фона выбранных ListBoxItems, сделайте что-то вроде:

<ListBox>
    <ListBox.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Value="Red"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Value="Black"/>
    </ListBox.Resources>    
</ListBox>
2 голосов
/ 23 марта 2009

Кент прав, что FocusVisualStyle связан только с фокусом клавиатуры, когда выбранные элементы управления с помощью клавиши Tab.

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

<ItemsControl x:Name="lb" ItemsSource="{Binding ElementName=UC,Path=Pages}" 
  Background="{Binding ElementName=UC,Path=Background}" 
  BorderBrush="Transparent" ScrollViewer.CanContentScroll="False" 
  ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
  ScrollViewer.VerticalScrollBarVisibility="Disabled">
  <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" IsItemsHost="True"/>
        </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
  <!-- others -->
</ItemsControl>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...