Кисть WPF Highlight для шаблона Combobox - PullRequest
0 голосов
/ 07 марта 2019

Я не могу понять, как установить кисть «Подсветка» в выпадающем списке (цвет, который пометит элемент, выбранный при наведении мыши) на определенную кисть.Я использовал Edit Template -> Copy, чтобы получить копию шаблона, где я пытаюсь установить SystemColors.HighlightBrushKey.Я видел ответы, что можно установить кисть, определив ее таким образом в ресурсе Style, но она просто не работает.

Я также пытался установить Grid's Style.Resource, в котором размещен комобокс, который тоже не помог.

Пожалуйста, смотрите строку 3 и строку 15, где я установил красный цвет,Нет эффекта.Что я делаю не так?

 <Style x:Key="TeachpendantVMVisionServerComboBoxStyle" TargetType="{x:Type ComboBox}">
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" />
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Red" />
        </Style.Resources>
        <Setter Property="HorizontalContentAlignment" Value="Center"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ComboBox}">
                    <Grid x:Name="grid">
                        <Grid.Style>
                            <Style>
                                <Style.Resources>
                                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" />
                                    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Red" />
                                </Style.Resources>
                            </Style>
                        </Grid.Style>

                        <Grid.ColumnDefinitions>
                            <ColumnDefinition/>
                            <ColumnDefinition MaxWidth="18"/>
                        </Grid.ColumnDefinitions>
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="ValidationStates">
                                <VisualState x:Name="Valid"/>
                                <VisualState x:Name="InvalidFocused">
                                    <Storyboard>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush)" Storyboard.TargetName="PART_EditableTextBox">
                                            <DiscreteObjectKeyFrame KeyTime="0">
                                                <DiscreteObjectKeyFrame.Value>
                                                    <SolidColorBrush Color="Red"/>
                                                </DiscreteObjectKeyFrame.Value>
                                            </DiscreteObjectKeyFrame>
                                        </ObjectAnimationUsingKeyFrames>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill)" Storyboard.TargetName="path">
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource MoveTextBox.Invalid.BorderBrush}"/>
                                        </ObjectAnimationUsingKeyFrames>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" Storyboard.TargetName="toggleButton">
                                            <EasingColorKeyFrame KeyTime="0" Value="#FFFB0000"/>
                                        </ColorAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="InvalidUnfocused">
                                    <Storyboard>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush)" Storyboard.TargetName="PART_EditableTextBox">
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource MoveTextBox.Invalid.BorderBrush}"/>
                                        </ObjectAnimationUsingKeyFrames>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" Storyboard.TargetName="toggleButton">
                                            <EasingColorKeyFrame KeyTime="0" Value="Red"/>
                                        </ColorAnimationUsingKeyFrames>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill)" Storyboard.TargetName="path">
                                            <DiscreteObjectKeyFrame KeyTime="0">
                                                <DiscreteObjectKeyFrame.Value>
                                                    <SolidColorBrush Color="Red"/>
                                                </DiscreteObjectKeyFrame.Value>
                                            </DiscreteObjectKeyFrame>
                                        </ObjectAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <TextBox x:Name="PART_EditableTextBox"                             
                            Padding="5,0,0,0"                             
                            Height="{TemplateBinding Height}">
                            <TextBox.Template>
                                <ControlTemplate TargetType="{x:Type TextBox}">
                                    <Grid>
                                        <Border 
                                            x:Name="border"
                                            CornerRadius="3,0,0,3"                                        
                                            BorderThickness="1,1,0,1"
                                            Background="{DynamicResource Button.Static.Background}"
                                            BorderBrush="{DynamicResource Button.Static.Background}">
                                            <ScrollViewer x:Name="PART_ContentHost"/>
                                        </Border>
                                    </Grid>
                                </ControlTemplate>
                            </TextBox.Template>
                        </TextBox>
                        <ToggleButton x:Name="toggleButton" Grid.Column="1" Margin="0"                                      
                            Height="{TemplateBinding Height}"                            
                            Focusable="False"
                            IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
                            ClickMode="Press" BorderBrush="#FFABADB3">
                            <ToggleButton.Template>
                                <ControlTemplate TargetType="{x:Type ToggleButton}">
                                    <Border                         
                                        Background="{DynamicResource Button.Checked.Background}" 
                                        x:Name="border" 
                                        CornerRadius="0,3,3,0" 
                                        BorderThickness="0,1,1,1"
                                        BorderBrush="{DynamicResource Button.Static.Background}">
                                        <ContentPresenter />
                                    </Border>
                                </ControlTemplate>
                            </ToggleButton.Template>
                            <Path x:Name="path" Grid.Column="1"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                                Data="M 0 0 L 4 4 L 8 0 Z"
                                Fill="Gold" />
                        </ToggleButton>
                        <ContentPresenter x:Name="ContentSite"
                            Content="{TemplateBinding SelectionBoxItem}"
                            ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
                            ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
                            VerticalAlignment="Center"
                            HorizontalAlignment="Right"
                            Margin="5,0,0,0" RecognizesAccessKey="True"/>
                        <Popup x:Name="Popup"
                            Placement="Bottom"
                            IsOpen="{TemplateBinding IsDropDownOpen}"
                            AllowsTransparency="True" 
                            Focusable="True"
                            PopupAnimation="Slide" 
                            OverridesDefaultStyle="True">
                            <Grid x:Name="DropDown"
                                SnapsToDevicePixels="True"                
                                MinWidth="{TemplateBinding ActualWidth}"
                                MaxHeight="{TemplateBinding MaxDropDownHeight}">                               
                                <Border 
                                    x:Name="DropDownBorder"
                                    BorderThickness="1"
                                    CornerRadius="5"
                                    Background="Azure"
                                    BorderBrush="DarkGray">                                    
                                </Border>   
                                <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">                                    
                                    <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" />
                                </ScrollViewer>
                            </Grid>
                        </Popup>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="Validation.ErrorTemplate">
            <Setter.Value>
                <ControlTemplate/>
            </Setter.Value>
        </Setter>
    </Style>

1 Ответ

0 голосов
/ 07 марта 2019

Это было довольно просто в конце концов (но не очевидно, где его найти).Просто отредактируйте копию ItemsContainerStyle, и все эти кисти можно установить оттуда.

Чтобы изменить макет ComboBox (создание круглого выпадающего списка или изменение цветов) Style = "{DynamicResourceMyComboBoxStyle} "

Чтобы изменить пылесос и выбранные цвета подсветки

ItemContainerStyle="{DynamicResource MyComboBoxItemS}"

Полный комбинированный список будет выглядеть так, как в XAML

<ComboBox x:Name="positionsComboBox"
   Grid.Column="1" 
   Grid.ColumnSpan="3"
   IsReadOnly = "True"
   IsEditable = "False"                                       
   Margin="3,0,3,0"
   ItemsSource="{Binding IDs, Source={StaticResource Locator}, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"                                 
   SelectedValue="{Binding SelectedID, Source={StaticResource Locator}, Mode=TwoWay}"                                                            
   Style="{DynamicResource MyComboBoxStyle}"
   IsSynchronizedWithCurrentItem="True"                                 
   ItemContainerStyle="{DynamicResource MyComboBoxItemContainerStyle}"                                                                           
   FontWeight="Bold" 
   FontSize="24"/>  
...