代码之家  ›  专栏  ›  技术社区  ›  Vahid

WPF中的DataTriggers和ComboBox

  •  0
  • Vahid  · 技术社区  · 6 年前

    当ItemsSource不包含使用DataTriggers的项时,如何更改组合框的颜色?

    <ComboBox ItemsSource="{Binding MyData}">
        <ComboBox.Style>
            <Style TargetType="{x:Type ComboBox}">
                <Style.Triggers>
                    <DataTrigger Binding="">
                        <Setter Property="BorderBrush" Value="Red" />
                        <Setter Property="BorderThicknes" Value="2"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ComboBox.Style>
    </ComboBox>
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Andy    6 年前

    右键单击组合框,然后使用“属性”>“杂项”提取模板。 在那里看一下名为“templateroot”的边框:

      <ControlTemplate TargetType="{x:Type ToggleButton}">
            <Border x:Name="templateRoot" 
                     BorderBrush="#FFACACAC" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="True">
                     <Border.Background>
    

    您需要添加一个xmlns: xmlns:主题=“清除-命名空间:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero2" 将BorderBrush更改为也绑定到Templatedparent

     <ControlTemplate TargetType="{x:Type ToggleButton}">
             <Border x:Name="templateRoot" 
                      BorderBrush="{TemplateBinding BorderBrush}"
    

    在这里,我给了它一个默认值green,因此很明显这些更改正在做任何事情:

            <ComboBox.Style>
                <Style TargetType="{x:Type ComboBox}">
                    <Setter Property="BorderBrush" Value="Green" />
                    <Setter Property="BorderThickness" Value="2" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding HasItems, RelativeSource={RelativeSource Self}}" Value="false">
                            <Setter Property="BorderBrush" Value="Red" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
    

      <DataTrigger Binding="{Binding ItemsSource.Count, RelativeSource={RelativeSource Self}}" Value="0">
             <Setter Property="BorderBrush" Value="Red" />
             </DataTrigger>
    

     <Trigger Property="HasItems" Value="false">
            <Setter Property="BorderBrush" Value="Red" />
      </Trigger>
    

    以上是在Windows10上测试的。