2009-09-01 3 views
0

나는 Return Authorization 수신 앱의 부품 목록을 채우는 ComboBox을 가지고 있습니다. 우리 RA 시스템에서 고객은 키트에 대한 반품을 지정할 수 있지만 실제로 키트의 일부만 반환합니다. 이 때문에 내 ComboBox은 키트에 속한 부품 목록을 표시하고 수신자에게 실제로 수신 된 부품을 선택하도록 요청합니다.ComboBoxItem을 강조 표시 할 수는 있지만 선택한 항목으로 설정할 수 있습니까?

수신 된 부품 목록의 선택된 항목이 지연 수신자에게 지정된 부품 및 수신 된 잘못된 부품 정보에 대해 기본값으로 지정되었습니다. 그래서 나는 ComboxBox을 선택 취소했다.

내가 원하는 것은 실제로 그것을 선택하지 않고 ComboBox의 지정된 부품을 강조 표시하는 것입니다. 이 방법을 사용하면 실제 부품을 신속하게 찾을 수 있으며 사용자는 실제로 부품을 선택해야합니다. 문제가 해결되지 않습니다,하지만

는, 나는 내가하고 싶은 것을 보여주는 것이라고 생각 :

<ComboBox Grid.Column="1" ItemsSource="{Binding Path=Part.MasterPart.FamilyParts}" 
      SelectedItem="{Binding Path=ReceivedPart, ValidatesOnDataErrors=True}" > 
    <ComboBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ComboBoxItem}">      
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=Part.MaxId}" 
          Value="{Binding Path=Part.MaxId}"> 
        <Setter Property="Background" Value="LightSalmon" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ComboBox.ItemContainerStyle> 
</ComboBox> 

답변

1

가 배경색을 설정하는 것보다 다른 강조하는 방법이 있고, 당신이 탐험 권 해드립니다 왜냐하면 사용자가 다른 이유로 서로 다른 배경색을 갖는 것을 혼란스럽게 할 수 있기 때문입니다 (강조 대 선택). 예를 들어 관련 항목 옆에 작은 별표를 넣거나 굵게 표시 할 수 있습니다.

<ComboBox.ItemContainerStyle> 
    <Style TargetType="ComboBoxItem"> 
     <Setter Property="Background" Value="{Binding Part.MaxId, Converter={StaticResource BackgroundConverter}}"/> 
    </Style> 
</ComboBox.ItemContainerStyle> 

가 더 좋은 뷰 모델을 사용하여 단지 BackgroundColor 속성에 직접 바인딩 :

<ComboBox.ItemContainerStyle> 
    <Style TargetType="ComboBoxItem"> 
     <Setter Property="Background" Value="{Binding BackgroundColor}"/> 
    </Style> 
</ComboBox.ItemContainerStyle> 
+0

켄트, 다른 강조 방법에 대한 의견을 듣고 싶습니다. 나는 그 문제를 혼란스럽게 할 수 있기 때문에 diffoxent가 comboxbox에서 색상을 강조 표시하지 않은 것에 대한 귀하의 권리를 믿습니다. – Russ

0

말했다, 당신은 단지 ComboBoxItem의 배경색을 설정하려면이 작업을 수행 할 수 있습니다

당신은 올바른 길을 가고 있습니다 만,이 인스턴스에서 강조 표시해야하는지 여부를 콤보 상자에 알려주는 Part 클래스에 bool 읽기 전용 속성을 넣습니다. 다음과 같이 시도해 볼 수 있습니다.

<ComboBox Grid.Column="1" ItemsSource="{Binding Path=Part.MasterPart.FamilyParts}" 
      SelectedItem="{Binding Path=ReceivedPart, ValidatesOnDataErrors=True}" > 
    <ComboBox.ItemTemplate> 
    <DataTemplate> 
     <Grid> 
     <Border Background="LightSalmon" Visibility="{Binding Part.Highlighted, Converter={StaticResource BoolToVizConverter}}"/> 
     <TextBlock Text="{Binding Part.Name}"/> 
     </Grid> 
    </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

이렇게하면 강조 표시가 잘못된 경우 테두리의 배경이 전혀 표시되지 않습니다.

2

당신은 올바른 아이디어를 가지고 있습니다. 내가 코드에 잘못 표시 한 것은 DataTrigger 특성뿐입니다.

가치 였다면, 음, 단지 값, 그것은 작동합니다 :

<DataTrigger Binding="{Binding Path=Part.MaxId}" Value="999" > 

내가 단순의 뷰 모델에 새 속성에이 논리를 마무리합니다 :

<DataTrigger Binding="{Binding Path=Part.ShouldHighlight}" Value="true"> 
관련 문제