2013-02-12 1 views

답변

2

여기에 약간 순진 접근 방식 :

<ComboBox 
    ItemsSource="{x:Static Fonts.SystemFontFamilies}" 
    Width="100" 
    > 
    <ComboBox.Style> 
    <Style TargetType="ComboBox"> 
     <Setter Property="Background" Value="Green" /> 
     <Style.Triggers> 
     <Trigger Property="IsDropDownOpen" Value="True"> 
      <Setter Property="Background" Value="Red" /> 
     </Trigger> 
     </Style.Triggers> 
    </Style> 
    </ComboBox.Style> 
</ComboBox> 

이 처음이 GreenBackground 속성을 설정하지만 드롭 다운이 나타납니다 때 Red로 이동하는 정렬합니다. 그러나,이 두 가지 문제가 있습니다 : 일부 Windows 테마에서

  1. (예를 들어, Vista 및 Windows 7에 사용 된 에어로 테마), 녹색 배경이 테마 나타 내기 위해 사용하는 푸른 색으로 가려 가도록 드롭 다운의 버튼을 눌렀습니다. 버튼이 시안 색으로 사라지기 전에 녹색으로 잠시 이동합니다.
  2. ComboBox.Background 속성은 드롭 다운 목록이 아닌 단추 자체의 모양에만 영향을줍니다. 실제로하고 싶은 것은 팝하는 부분의 배경색을 변경하는 것일 수 있습니다. 즉 실제로 드롭 다운에 나타나는 ComboBoxItem 컨트롤의 배경 색상을 변화하고 있지만이 원하는 효과를해야합니다,
    <ComboBox 
        ItemsSource="{x:Static Fonts.SystemFontFamilies}" 
        Width="100"  > 
        <ComboBox.Resources> 
        <Style TargetType="ComboBoxItem"> 
         <Setter Property="Background" Value="Orange" /> 
        </Style> 
        </ComboBox.Resources> 
    </ComboBox> 
    

    은 엄밀히 말하면 : 2 당신이 원하는 어떤 경우

,이 트릭을 수행 .

기본 제공 ComboBox 템플릿이 Background 속성에 대한 지원을 제대로 제공하지 않기 때문에 1을 수정하려는 경우 사용자 지정 템플릿이 필요합니다. 버튼 부분의 색상이 변경되기 때문입니다 다양한 상황에서. Aero 테마의 모양은 ComboBox이며 실제로 사용자 지정 배경색을 지원하도록 설계되지 않았으므로 컨트롤에 대한 사용자 지정 모양을 만들어야합니다.

0

좋아, 뒤에 코드에 대한 귀하의 질문에 대답 : 그러니까 기본적으로

((ComboBox)o).Background = GetBrushByRGB(r, g, b); 
foreach (ComboBoxItem item in ((ComboBox)o).Items) 
{ 
    item.Background = GetBrushByRGB(r, g, b); 
} 

:

foreach (String tag in tags) 
{ 
    ComboBoxItem item = new ComboBoxItem(); 
    item.Content = tag; 
    cbTags.Items.Add(item); 
} 

는 그런 다음 항목에 배경 색상을 수정할 수 있습니다

이 콤보 상자에 항목 추가하기 ComboBoxItem의 배경색을 변경해야합니다.

0

먼저 콤보 박스의 기본 템플릿을 가져와야합니다 (필요한 경우 아래에서 자세한 내용 참조). 그 후, 최초의 "ControlTemplate.Triggers"태그 내부에이 XAML을 넣어 : 드롭 다운이 열려있을 때

<DataTrigger Binding="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" Value="True"> 
    <Setter Property="Background" TargetName="templateRoot" Value="Red"/> 
</DataTrigger> 

귀하의 콤보 버튼 레드있을 것입니다.

기본 템플릿을 가져 오려면 다음과 같이하십시오. Visual Studio 2015에서 디자인 모드로 페이지를 봅니다. 그런 다음 콤보 박스를 마우스 오른쪽 버튼으로 클릭하고 "템플릿 편집 -> 복사본 편집"을 선택하십시오. 이렇게하면 기본 템플릿이 생성됩니다.

관련 문제