Элемент, отображаемый с помощью DataTemplate с любой фоновой кистью, отображает выделенную область позади элемента. - PullRequest
0 голосов
/ 13 апреля 2010

У меня есть ListBox, который использует DataTemplate для рендеринга элементов данных. XAML для таблицы данных выглядит следующим образом:

<DataTemplate x:Key="NameResultTemplate">
                <WrapPanel x:Name="PersonResultWrapper" Margin="0" Orientation="Vertical" Background="{Binding Converter={StaticResource NameResultToColor}, Mode=OneWay}" >
                    <i:Interaction.Triggers>
                        <i:EventTrigger EventName="MouseDown">
                            <cmd:EventToCommand x:Name="SelectPersonEventCommand" Command="{Binding Search.SelectedPersonCommand, Mode=OneWay, Source={StaticResource Locator}}" CommandParameter="{Binding Mode=OneWay}" />
                        </i:EventTrigger>
                    </i:Interaction.Triggers>
                    <TextBlock x:Name="txtPersonName" TextWrapping="Wrap" Margin="0" VerticalAlignment="Top" Text="{Binding PersonName}" FontSize="24" Foreground="Black" />
                    <TextBlock x:Name="txtAgencyName" TextWrapping="Wrap" Text="{Binding AgencyName}" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="0" FontStyle="Italic" Foreground="Black" />
                    <TextBlock x:Name="txtPIDORI" TextWrapping="Wrap" Text="{Binding PIDORI}" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="0" FontStyle="Italic" Foreground="Black" />
                    <TextBlock x:Name="txtDescriptors" TextWrapping="Wrap" Text="{Binding DisplayDescriptors}" Margin="0" VerticalAlignment="Top" Foreground="Black"/>
                    <Separator Margin="0" Width="400" />
                </WrapPanel>
            </DataTemplate>

Обратите внимание, что существует преобразователь значений с именем NameResultToColor, который меняет кисть фона отрисованной панели WrapPanel на кисть градиента в зависимости от определенных сценариев.

Все это работает так, как я ожидал, за исключением тех случаев, когда вы нажимаете на любой из визуализированных элементов ListBox. Если щелкнуть один из них, появляется только малейший признак цвета выделения (синий цвет по умолчанию). Я могу видеть его след под моим предметом с градиентной кистью. Если я переустановил кисть фона на «без кисти», то рендеринг выделения будет работать правильно. Если я установлю кисть фона на сплошной цвет, она также не будет отображаться так, как я ожидаю.

Как я могу получить выделение цвета, чтобы быть на вершине? Что превосходит выделение рендеринга?

1 Ответ

3 голосов
/ 14 апреля 2010

Проблема в том, что шаблон вашего предмета рисуется поверх выделения, нарисованного ListBoxItem. Если вы хотите убедиться, что цвет сохранен, вы можете добавить DataTrigger, чтобы установить для фона WrapPanel значение NULL при выборе элемента:

<DataTemplate x:Key="NameResultTemplate">
    <WrapPanel x:Name="PersonResultWrapper">
        ...
    </WrapPanel>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}" Value="True">
            <Setter TargetName="PersonResultWrapper" Property="Background" Value="{x:Null}" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...