【问题标题】:WPF change the background color of an edittable combobox in codeWPF在代码中更改可编辑组合框的背景颜色
【发布时间】:2015-08-21 19:17:33
【问题描述】:

我需要在代码中设置可编辑combobox 的背景颜色。这是我拥有但不改变颜色的:

        ComboBox comboBox = sender as ComboBox;
        comboBox.Background = Brushes.PeachPuff;

        if (comboBox.IsEditable == true)
        {
            TextBox textBox = (TextBox)comboBox.Template.FindName("PART_EditableTextBox", comboBox);
            if (textBox != null)
            {
                textBox.Background = Brushes.PeachPuff;

            }
        }

我原以为背景颜色会变成 PeachPuff(浅橙色),但什么也没发生 - 有什么想法吗?

【问题讨论】:

  • 你确定它正在命中代码,因为它应该可以工作吗?
  • 是的,我单步将其困住,它肯定会命中此代码
  • 你能改变组合框背景的颜色吗?

标签: c# wpf combobox


【解决方案1】:

使用background 属性更改comboboxbackground 仅适用于Win7 及更早版本,在Windows 8 及更高版本中ComboBox 的默认模板已更改,以修复您应该编辑默认模板,

  1. 使用 VisualStudio 2013Blend,右键单击 combobox 并选择 EditTemplate > Edit a Copy:

  1. 在生成的 Xaml 中搜索 <ControlTemplate TargetType="{x:Type ToggleButton}"> 并将 {StaticResource ComboBox.Static.Background} 标记替换为 TemplateBindingBackground 属性,更新后您的代码应如下所示:

     ...
      <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ToggleButton}">
                    <Border x:Name="templateRoot" BorderBrush="{StaticResource ComboBox.Static.Border}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
                        <Border x:Name="splitBorder" BorderBrush="Transparent" BorderThickness="1" HorizontalAlignment="Right" Margin="0" SnapsToDevicePixels="true" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}">
                            <Path x:Name="arrow" Data="F1 M 0,0 L 2.667,2.66665 L 5.3334,0 L 5.3334,-1.78168 L 2.6667,0.88501 L0,-1.78168 L0,0 Z" Fill="{StaticResource ComboBox.Static.Glyph}" HorizontalAlignment="Center" Margin="0" VerticalAlignment="Center"/>
                        </Border>
                    </Border>
                    <ControlTemplate.Triggers>
                        <MultiDataTrigger>
                         ...
    
  2. 现在,您可以使用 Background 属性来更改 Combobox 颜色:

    <Grid>
      <ComboBox IsEditable="True" x:Name="EditableComboBox" Background="PeachPuff" VerticalAlignment="Center" HorizontalAlignment="Center" Width="200" Style="{DynamicResource ComboBoxStyle1}" >
      </ComboBox>
    </Grid>
    

【讨论】:

  • 但是我已经设法通过使用组合框,背景色来更改 Windows 8 及更高版本中组合框的背景颜色。它适用于除“isEditable”设置为 true 的组合以外的所有组合。这就是上面的代码试图做的(即获取文本框)部分并设置背景,但它没有做任何事情。我真的需要在代码中而不是在 XAML 中执行此操作/有人有什么想法吗?
猜你喜欢
  • 2018-12-27
  • 2019-05-15
  • 2022-01-21
  • 2016-07-09
  • 1970-01-01
  • 2012-05-02
  • 2016-09-11
相关资源
最近更新 更多