2015-08-21 42 views
0

我需要在代码中设置可编辑combobox的背景颜色。这是我有,但不改变颜色:WPF更改代码中可编辑组合框的背景颜色

 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; 

      } 
     } 

我期待的背景颜色更改为粉桃红(浅橙色),但没有任何反应 - 任何想法?

+0

你确定它击中的代码,因为这应该工作? – thewisegod

+0

是的,我单步骤陷入它,它肯定会击中此代码 –

+0

你可以改变组合框背景的颜色? – thewisegod

回答

2

使用background属性只用在Win7及以上的工作,在Windows 8及以上的ComboBox默认模板已被更改,要解决这个问题,你应该修改默认模板更改comboboxbackground

  1. 使用的VisualStudio 2013混合,右键单击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属性改变颜色:

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

    combobox

+0

但我已经设法改变组合框在Windows 8和以上的背景颜色只需使用组合框,backgrounf。它适用于所有组合,而不是组合的“isEditable”设置为true。这就是上面的代码试图做的(即获取文本框)部分并设置背景,但它没有做任何事情。我真的需要在代码中做到这一点,而不是在XAML /任何人有任何想法? –