Выбранный WPF ListViewItem: использование ComboBox в шаблоне ItemTemplate - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь создать шаблон данных для элементов в ListView, который сам по себе не является проблемой при использовании TextBlocks.

При выборе элемента в ListView он выделяется, как и ожидалось, с помощьюболее темный фон и текстовые блоки имеют белый передний план.

Однако, когда я добавляю ComboBox к шаблону данных и когда строка подсвечивается, передний план ComboBox остается черным независимо от того, выбран он или нет.

Я не применяю никаких стилей к ComboBox и другим, кроме свойств SelectedValue и ItemSource, я не делаю ничего с ComboBox.

Используя LivePropertyExplorer, я вижу только то, что передний план "переопределен", ноне могу видеть, где.

Screenshot of two items here

Помощь будет принята с благодарностью!

 <ListView DockPanel.Dock="Bottom"
              BorderThickness="0,1,0,0"
              Padding="3"
              BorderBrush="LightGray"
              MinHeight="150"
              MaxHeight="150"
              ItemContainerStyle="{StaticResource ListViewItemStyle25}">

        <ListView.ItemTemplate>
            <DataTemplate>
                <DockPanel LastChildFill="False">
                    <DockPanel.Resources>
                        <Style TargetType="TextBlock">
                            <Setter Property="FontSize"
                                    Value="14" />
                            <Setter Property="Background"
                                    Value="Transparent" />
                        </Style>
                    </DockPanel.Resources>

                    <ComboBox BorderThickness="1"
                              Background="Transparent"
                              MinWidth="120"
                              MaxWidth="120"
                              FontSize="14"
                              IsSynchronizedWithCurrentItem="False"
                              SelectedValue="{Binding IResourceTravelDocument_TravelDocumentType}">

                        <ComboBox.Style>
                            <Style TargetType="{x:Type ComboBox}">
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding IsPrimary, ElementName=userControl}" 
                                                 Value="True">
                                        <Setter Property="ItemsSource"
                                                Value="{Binding DataContext.IResourceTravelDocumentsModuleViewModel_ResourceTravelDocumentTypes_Primary, 
                                                    ElementName=userControl}" />
                                    </DataTrigger>
                                    <DataTrigger Binding="{Binding IsPrimary, ElementName=userControl}"
                                                 Value="False">
                                        <Setter Property="ItemsSource"
                                                Value="{Binding DataContext.IResourceTravelDocumentsModuleViewModel_ResourceTravelDocumentTypes_Supplementary, 
                                                    ElementName=userControl}"  />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </ComboBox.Style>

                    </ComboBox>

                </DockPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

    <Style x:Key="ListViewItemStyle" TargetType="{x:Type ListViewItem}">

    <Setter Property="HorizontalContentAlignment"
            Value="Stretch" />
    <Setter Property="Background"
            Value="Transparent" />
    <Setter Property="VerticalContentAlignment"
            Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" />
    <Setter Property="Padding"
            Value="2,0,0,0" />
    <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>

                    <Trigger Property="ItemsControl.AlternationIndex"
                             Value="0">
                        <Setter Property="Background"
                                Value="White"></Setter>
                    </Trigger>
                    <Trigger Property="ItemsControl.AlternationIndex"
                             Value="1">
                        <Setter Property="Background"
                                Value="WhiteSmoke"></Setter>
                    </Trigger>

                    <Trigger Property="IsSelected"
                             Value="true">
                        <Setter Property="Background"
                                TargetName="Bd"
                                Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
                        <Setter Property="Foreground"
                                Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" />

                    </Trigger>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsSelected"
                                       Value="true" />
                            <Condition Property="Selector.IsSelectionActive"
                                       Value="false" />
                        </MultiTrigger.Conditions>
                        <Setter Property="Background"
                                TargetName="Bd"
                                Value="RoyalBlue" />
                        <Setter Property="Foreground"
                                Value="AliceBlue" />
                    </MultiTrigger>
                    <Trigger Property="IsEnabled"
                             Value="false">
                        <Setter Property="Foreground"
                                Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>

</Style>

1 Ответ

0 голосов
/ 04 июня 2018

ComboBox имеет свой собственный Template и не наследует свойства Background и Foreground от родительского ListViewItem по умолчанию.

Вы можете добавить еще DataTrigger кстиль ComboBox, который связывается с ListViewItem, хотя:

<Style TargetType="{x:Type ComboBox}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListViewItem}}" Value="true">
            <Setter Property="Foreground" Value="AliceBlue" />
        </DataTrigger>

        <DataTrigger Binding="{Binding IsPrimary, ElementName=userControl}"  Value="True">
            <Setter Property="ItemsSource" Value="{Binding DataContext.IResourceTravelDocumentsModuleViewModel_ResourceTravelDocumentTypes_Primary, ElementName=userControl}" />
        </DataTrigger>
        <DataTrigger Binding="{Binding IsPrimary, ElementName=userControl}" Value="False">
            <Setter Property="ItemsSource" Value="{Binding DataContext.IResourceTravelDocumentsModuleViewModel_ResourceTravelDocumentTypes_Supplementary, ElementName=userControl}"  />
        </DataTrigger>
    </Style.Triggers>
</Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...