2014-10-30 1 views
0

enter image description here편집 가능한 ComboBox에서 TextBox의 배경색을 어떻게 설정합니까?

표시된 이미지는 내 wpf 응용 프로그램의 일부입니다. 나는 입력을 사용할 수 있도록 편집 가능한 콤보 박스로 설정했다. 그러나 TextBox 내부에는 흰색 배경이있어서 많이 좋아하지 않습니다. ? 내가 다른 색으로의 색상을 변경할 수있는 방법 (이 경우, 나는 "#FF2E2E2E"로 변경하고 싶습니다.)

내 XAML :

<ComboBox Height="23" Background="#FF2E2E2E" Foreground="#FF979797" Grid.Column="1" Margin="107,43,0,0" HorizontalAlignment="Left" Width="133" IsEditable="True" VerticalAlignment="Top" IsEnabled="False"> 
     <ComboBox.Resources> 
      <SolidColorBrush x:Key="{x:Static SystemColors.WindowBrushKey}" Color="#FF232323" /> 
     </ComboBox.Resources> 
    </ComboBox> 

UPDATE :

enter image description here

다른 컨트롤 및 리소스와는 아무 관련이 없습니다.

+0

'ComboBox.Resources'에서이 방법을 찾지 못했지만 전체 테마를 만들려면이 키를 찾아야합니다.''그리고 원하는 색으로 바꿉니다. 이 웹 페이지의 지침을 사용하여 테마를 생성하십시오 : http://blog.magnusmontin.net/2014/04/30/changing-the-background-colour-of-a-combobox-in-wpf-on-windows-8/ – Hosch250

+0

XAML 코드 스 니펫을 직접 사용해 보셨습니까? *** Kaxaml ***을 사용해 보았습니다. 이미지에 보이는 것과 같지 않습니다 (내부 TextBox에는 흰색 배경이 없음). –

+0

@KingKing 내 업데이트를 참조하십시오. – HuStmpHrrr

답변

2

... 결국 나 자신을 알게되었습니다.

우리는 기본 템플릿을 수정하여 변경할 수 있습니다 :

<SolidColorBrush x:Key="TextBox.Static.Background" Color="#FF2E2E2E"/> 
<ControlTemplate x:Key="ComboBoxEditableTemplate" TargetType="{x:Type ComboBox}"> 
         <Grid x:Name="templateRoot" SnapsToDevicePixels="true"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="*"/> 
           <ColumnDefinition MinWidth="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" Width="0"/> 
          </Grid.ColumnDefinitions> 
          <Popup x:Name="PART_Popup" AllowsTransparency="true" Grid.ColumnSpan="2" IsOpen="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}" Placement="Bottom"> 
           <Themes:SystemDropShadowChrome x:Name="shadow" Color="Transparent" MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{Binding ActualWidth, ElementName=templateRoot}"> 
            <Border x:Name="dropDownBorder" BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}" BorderThickness="1" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"> 
             <ScrollViewer x:Name="DropDownScrollViewer"> 
              <Grid x:Name="grid" RenderOptions.ClearTypeHint="Enabled"> 
               <Canvas x:Name="canvas" HorizontalAlignment="Left" Height="0" VerticalAlignment="Top" Width="0"> 
                <Rectangle x:Name="opaqueRect" Fill="{Binding Background, ElementName=dropDownBorder}" Height="{Binding ActualHeight, ElementName=dropDownBorder}" Width="{Binding ActualWidth, ElementName=dropDownBorder}"/> 
               </Canvas> 
               <ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Contained" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
              </Grid> 
             </ScrollViewer> 
            </Border> 
           </Themes:SystemDropShadowChrome> 
          </Popup> 
          <ToggleButton x:Name="toggleButton" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.ColumnSpan="2" IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ComboBoxToggleButton}"/> 
          <Border x:Name="border" Background="{StaticResource TextBox.Static.Background}" Margin="{TemplateBinding BorderThickness}"> 
           <TextBox x:Name="PART_EditableTextBox" Background="{StaticResource TextBox.Static.Background}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" IsReadOnly="{Binding IsReadOnly, RelativeSource={RelativeSource TemplatedParent}}" Margin="{TemplateBinding Padding}" Style="{StaticResource ComboBoxEditableTextBox}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/> 
          </Border> 
         </Grid> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsEnabled" Value="false"> 
           <Setter Property="Opacity" TargetName="border" Value="0.56"/> 
          </Trigger> 
          <Trigger Property="IsKeyboardFocusWithin" Value="true"> 
           <Setter Property="Foreground" Value="Black"/> 
          </Trigger> 
          <Trigger Property="HasDropShadow" SourceName="PART_Popup" Value="true"> 
           <Setter Property="Margin" TargetName="shadow" Value="0,0,5,5"/> 
           <Setter Property="Color" TargetName="shadow" Value="#71000000"/> 
          </Trigger> 
          <Trigger Property="HasItems" Value="false"> 
           <Setter Property="Height" TargetName="dropDownBorder" Value="95"/> 
          </Trigger> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition Property="IsGrouping" Value="true"/> 
            <Condition Property="VirtualizingPanel.IsVirtualizingWhenGrouping" Value="false"/> 
           </MultiTrigger.Conditions> 
           <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> 
          </MultiTrigger> 
          <Trigger Property="ScrollViewer.CanContentScroll" SourceName="DropDownScrollViewer" Value="false"> 
           <Setter Property="Canvas.Top" TargetName="opaqueRect" Value="{Binding VerticalOffset, ElementName=DropDownScrollViewer}"/> 
           <Setter Property="Canvas.Left" TargetName="opaqueRect" Value="{Binding HorizontalOffset, ElementName=DropDownScrollViewer}"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 

내가 BTW 일부 관련이없는 코드를 삭제합니다. 키 포인트는

<SolidColorBrush x:Key="TextBox.Static.Background" Color="#FF2E2E2E"/> 

     <Border x:Name="border" Background="{StaticResource TextBox.Static.Background}" Margin="{TemplateBinding BorderThickness}"> 

내가 텍스트 상자가 기본 주위 테두리의 색상을 변경하기 만하면됩니다입니다!

+0

두께에 바인딩 된 마진 설정을 정말 좋아합니다. – Florian

0

나는 왕 왕 동의 : 나는 새로운 WPF 창을 만들어 (나는의 IsEnabled = false를 설정하지 않은) 콤보 상자에 대한 코드의 대부분을 추가하고 나를 위해 다음과 같습니다
combobox

을 다음은 창에 대한 전체 코드입니다.

<Window x:Class="WpfApplication35.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <ComboBox Background="#FF2E2E2E" IsEditable="True" VerticalAlignment="Top" HorizontalAlignment="Left" Width="100"> 
      <ComboBox.Resources> 
       <SolidColorBrush x:Key="{x:Static SystemColors.WindowBrushKey}" Color="#FF2E2E2E" /> 
      </ComboBox.Resources> 
     </ComboBox> 
    </Grid> 
</Window> 

프로젝트에서 "정리"만하면됩니까?

+0

내 업데이트를 참조하십시오. – HuStmpHrrr

관련 문제