2012-12-08 3 views
0

내 ComboBoxItem 콘텐츠에 일반 스타일을 활용하고 내 기본 클래스의 다른 속성에 텍스트 콘텐츠를 바인딩하려고합니다. 이것이 제가 생각해 낼 수있는 최선의 방법이지만 바인딩은 하드 코딩되어 있습니다. 그래서이 ItemContainerStyle을 사용하는 콤보 박스에 바인딩 된 모든 클래스에 대해 "MainText"및 "SubText"속성을 구현해야합니다.WPF ComboBox : 바인딩을 사용하여 일반 ItemContainerStyle을 활용하는 방법

질문입니다, 그래서 거기에 combobox에서 참조 된 스타일을 어디에 기본 클래스의 문자열 속성을 사용할 수 지정할 수있는 바인딩 소프트 소프트 코드 된 방법이 있나요.

<Style TargetType="{x:Type ComboBoxItem}" x:Key="ComboBoxItemStyleA1"> 
     <Setter Property="Template" > 
      <Setter.Value> 
       <ControlTemplate TargetType="ComboBoxItem"> 

        <Border x:Name="BB" Padding="8,3,8,3" Background="DarkGreen"> 
         <StackPanel Margin="0"> 
          <TextBlock Foreground="White" FontSize="16" Text="{Binding MainText}"/> 
          <TextBlock Foreground="White" FontSize="8" Text="{Binding SubText}"/> 
         </StackPanel> 
        </Border> 
         <ControlTemplate.Triggers> 

         <Trigger Property="IsSelected" Value="True"> 
          <Setter Property="Background" TargetName="BB" Value="#FF256294"/> 
          <Setter Property="Foreground" Value="White"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

그리고 스타일을 사용하는 ...

<ComboBox ItemsSource="{Binding Items}" 
    ItemContainerStyle="{StaticResource ComboBoxItemStyleA1}" /> 

또한

이 dowhilefor 수의 대답은 (많은 많은 감사 - WPF는 훌륭하지만 확실 발견의 항해입니다)

내가 데이터를 사용 템플릿을 사용하여 원래 셀 모양을 정의한 다음 onmouseover 트리거를 지정할 수있는 컨트롤 템플릿이있는 comboboxitem 기반 스타일을 사용하려고합니다. 즉, 배경색 등을 변경하는 것이 었습니다.

Butj a) 위의 템플릿의 테두리 섹션을 제거 할 수 없습니다. 트리거는 targettype = "BB"에 의해 묶여 있습니다. 그래서 나는 데이터 저장소가 템플릿 바인딩에서 백그라운드를 가져올 수 있지만 컨테이너를 가져 오는 방법을 모르는 컨테이너에 트리거를 연결하려고합니다.

b) 주석을 달아도 콤보 박스는 내가 정의한 DataTemplate을 찾아서 사용하지 않습니다. 내 comboboxitemstyle에서 controltemplate을 정의하면 datatemplate을 가져 오는 것을 중단합니다.

나는 여기에 의미가 있기를 바란다 - 최종선은 내 cobobox 항목의 배경색을 설정하는 트리거를 적용 할 수있는 스타일을 원한다. 데이터가 무엇인지 알 필요가 없습니다. 즉,이 배경색에 바인딩 (템플릿) 할 데이터 템플릿을 연결할 수 있어야합니다.

매우 빠른 응답에 대해 감사드립니다.

BTW 그래서 내가 그에 대한 ItemContainerStyle를 사용하지 않는 콤보 상자 목록 모든

답변

1

처음에 표시되는 내용에 드롭 다운에서 다른 표현을 가질 수 ItemTemplate을와 연동 해에 ItemContainerStyle을 사용하고 있습니다. 더 정확하게는 ItemContainerStyle 안에있는 datacontext에 대한 바인딩이 없으므로 적어도 시도하지 마십시오. 왜? 스타일은 내용을 무시한 콤보 박스 항목의 모양을 정의하는 데 사용됩니다. 컨텐트의 모양을 정의하려면 DataTemplate을 사용합니다. 콤보 박스에서 그가 제공 한 데이터에 대한 적절한 DataTemplate을 어디에서 찾을 수 있는지 알려주는 여러 가지 방법이 있습니다. 속성 ItemTemplate, ItemTemplateSelector을 확인하고 암시 적 스타일을 검색하여 자세한 내용을 확인하십시오.

그래서 문제가되는 경우 넣을 객체에 대해 신경 쓰지 않는 combobox (실제로는 더 이상 필요가없는 경우)를 하나 만듭니다. 이제 템플릿을 만들려는 데이터 개체에 대한 지식을 가진 여러 DataTemplate을 각각 및 모든 사용자에게 제공해야합니다. 그 주위에는 방법이 없으며 소프트 데이터 바인딩이 없습니다. 템플릿을 작고 단순하게 유지하십시오.어떤 이유로 정확한 템플리트가 필요하지만 속성의 이름이 다르게 지정되면 Caption, Description 속성을 가진 DataContext에 래퍼 항목을 사용하지 말고 이러한 속성이 래핑 된 실제 데이터로 채워지는 방식을 코드에서 결정할 수 있습니다 이 개체에.

+0

나는 WPF를 내가 생각했던 것보다 더 가깝게 이해하고 있을지도 모른다. 나는 당신이 특히 스타일에서 바인딩을 지키고 있다고 말하는 것에 모두 동의한다. 이것은 정말로 내가하고 싶었던 것이다. (제쳐두고, "캡션"과 "설명"이 포함 된 래퍼 클래스를 작성하는 것에 동의합니다. 모든 콤보 박스는 동일한 모양과 느낌 및 멋진 솔루션을 갖게됩니다. ... 나는 이것을 사용할지도 모르지만 지금은이 퍼즐을 해결하려고 노력하고 있습니다 ....) –

+0

죄송합니다 - new to stackoverflow - 내가 무슨 말을했는지 끝내자. –

+0

나는 코멘트보다는 여기에 나의 질문을 편집했다, 고맙다 dowhilefor. –