2015-08-21 79 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 /任何人有任何想法? –