Wpf VisualStateManager中的组组合

Wpf VisualStateManager中的组组合,wpf,Wpf,我目前正在研究组合框控件的样式。弹出部分包含所有可供选择的项目。预选的项目有一个背景色,所有其他的都是白色。使用默认样式,当弹出窗口中的任何项目悬停时,它将获得与所选项目相同的背景颜色,并且所选项目将丢失其特殊高亮显示。我不能和经理一起工作 有两组:CommonState和SelectionState。CommonStates包含状态名MouseOver,该名称在项目悬停时适用。SelectionStates包含所选状态名称,该名称适用于所选项目 我已经为这两个州设置了背景色。现在会发生以下情况

我目前正在研究组合框控件的样式。弹出部分包含所有可供选择的项目。预选的项目有一个背景色,所有其他的都是白色。使用默认样式,当弹出窗口中的任何项目悬停时,它将获得与所选项目相同的背景颜色,并且所选项目将丢失其特殊高亮显示。我不能和经理一起工作

有两组:CommonState和SelectionState。CommonStates包含状态名MouseOver,该名称在项目悬停时适用。SelectionStates包含所选状态名称,该名称适用于所选项目

我已经为这两个州设置了背景色。现在会发生以下情况:当弹出窗口打开时,仅高亮显示所选项目。当我悬停任何项目时,该项目也会高亮显示。选定项仅在悬停一次后永久丢失其高亮显示

我希望所选的项目永久失去它的颜色,并立即当另一个项目是悬停,像默认的平台风格

如何做到这一点?这里是否需要使用触发器而不是VisualStateManager

以下是一些XAML代码,基于:


请注意,所有组都是并行“活动”的。这意味着每个组都有一个状态处于活动状态。缺点是,如果修改不同组中的同一元素,则最后一个设置获胜。在本例中,您可以修改两个组中的目标“边界”。唯一的解决方案是添加另一个控件,在SelectionState中修改on,在CommonState中修改另一个。

请注意,所有组并行“活动”。这意味着每个组都有一个状态处于活动状态。缺点是,如果修改不同组中的同一元素,则最后一个设置获胜。在本例中,您可以修改两个组中的目标“边界”。唯一的解决方案是添加另一个控件,在SelectionState中修改on,在CommonState中修改另一个。

请注意,所有组并行“活动”。这意味着每个组都有一个状态处于活动状态。缺点是,如果修改不同组中的同一元素,则最后一个设置获胜。在本例中,您可以修改两个组中的目标“边界”。唯一的解决方案是添加另一个控件,在SelectionState中修改on,在CommonState中修改另一个。

请注意,所有组并行“活动”。这意味着每个组都有一个状态处于活动状态。缺点是,如果修改不同组中的同一元素,则最后一个设置获胜。在本例中,您可以修改两个组中的目标“边界”。唯一的解决方案是添加另一个控件,在SelectionState中修改on,在CommonState中修改另一个。

试试这个

 <Style x:Key="ComboBoxItemStyle" TargetType="{x:Type ComboBoxItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ComboBoxItem">
                    <Grid>
                        <Border x:Name="Border" Background="Transparent">
                            <TextBlock FontSize="12" FontFamily="Segoe UI Light">
                            <ContentPresenter></ContentPresenter>
                            </TextBlock>
                        </Border>                         
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="ComboBoxItem.IsSelected" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="#9bceff"></Setter>
                        </Trigger>
                        <Trigger Property="ComboBoxItem.IsMouseOver" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="LightGray"></Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>         
    </Style>

试试这个

 <Style x:Key="ComboBoxItemStyle" TargetType="{x:Type ComboBoxItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ComboBoxItem">
                    <Grid>
                        <Border x:Name="Border" Background="Transparent">
                            <TextBlock FontSize="12" FontFamily="Segoe UI Light">
                            <ContentPresenter></ContentPresenter>
                            </TextBlock>
                        </Border>                         
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="ComboBoxItem.IsSelected" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="#9bceff"></Setter>
                        </Trigger>
                        <Trigger Property="ComboBoxItem.IsMouseOver" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="LightGray"></Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>         
    </Style>

试试这个

 <Style x:Key="ComboBoxItemStyle" TargetType="{x:Type ComboBoxItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ComboBoxItem">
                    <Grid>
                        <Border x:Name="Border" Background="Transparent">
                            <TextBlock FontSize="12" FontFamily="Segoe UI Light">
                            <ContentPresenter></ContentPresenter>
                            </TextBlock>
                        </Border>                         
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="ComboBoxItem.IsSelected" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="#9bceff"></Setter>
                        </Trigger>
                        <Trigger Property="ComboBoxItem.IsMouseOver" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="LightGray"></Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>         
    </Style>

试试这个

 <Style x:Key="ComboBoxItemStyle" TargetType="{x:Type ComboBoxItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ComboBoxItem">
                    <Grid>
                        <Border x:Name="Border" Background="Transparent">
                            <TextBlock FontSize="12" FontFamily="Segoe UI Light">
                            <ContentPresenter></ContentPresenter>
                            </TextBlock>
                        </Border>                         
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="ComboBoxItem.IsSelected" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="#9bceff"></Setter>
                        </Trigger>
                        <Trigger Property="ComboBoxItem.IsMouseOver" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="LightGray"></Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>         
    </Style>


我只是想在我的问题中补充一点:我可以指定来自不同组的状态组合吗?说,鼠标悬停并选中,然后做其他事情?比如多触发器。不幸的是,VisualStates不提供组合。一般来说,我喜欢VisualStates。但有时需要一些创造力。通常显示/隐藏覆盖的控件。对于你们的特殊情况,我现在有一个好主意。我只是想在我的问题中补充一点:我可以指定来自不同组的状态组合吗?说,鼠标悬停并选中,然后做其他事情?比如多触发器。不幸的是,VisualStates不提供组合。一般来说,我喜欢VisualStates。但有时需要一些创造力。通常显示/隐藏覆盖的控件。现在我有个好主意