2010-07-27 3 views
2

질문이 약간 이상하게 들리지만, ItemsControl에서 선택되지 않은 모든 항목의 불투명도를 변경하고 싶습니다. 다른 말로하면, 나는 선택된 항목을 더 "가시화"하고 다른 항목은 더 "모호하게"보이도록하고 싶다.ItemsControl에서 어떻게 선택되지 않은 모든 항목의 불투명도를 변경할 수 있습니까?

각 항목이 "MyObject"클래스의 인스턴스 인 ItemsControl에서 파생 된 "MyCustomControl"사용자 지정 컨트롤이 있습니다.

"MyObject"의 "LargeImage"속성에 연결된 Source 속성을 가진 Image로 ItemTemplate을 설정 한 사용자 지정 컨트롤에 대한 스타일을 만들었습니다. 여기에 문제가 있습니다. 항목을 선택할 때 다른 요소의 불투명도를 설정하고 싶지만 길을 찾지 못했습니다!

은 여기 내 (간체) XAML 코드입니다 :

<Style TargetType="{x:Type MyCustomControl}" x:Key="MyStyle"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ui:MyCustomControl}"> 
       <Border Height="{TemplateBinding Height}" Width="Auto" Background="{TemplateBinding Background}"> 
        <ItemsPresenter VerticalAlignment="Center" IsHitTestVisible="True"/> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="ItemsPanel"> 
     <Setter.Value> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Horizontal"></StackPanel> 
      </ItemsPanelTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="ItemTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <Grid> 
        <Button> 
         <Image Source="{Binding Path=LargeImage}" Stretch="Uniform"/> 
        </Button> 
       </Grid> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

답변

0
<ListBox> 
    <ListBox.ItemContainerStyle> 
     <Setter Property="IsSelected" Value="{Binding IsSelected}"/> 
     <Setter Property="Opacity" Value="{Binding IsSelected, Converter={StaticResource YourOpacityConverter}}"/> 
    </ListBox.ItemContainerStyle> 
</ListBox> 

당신이 목록 상자이 할 수있는 당신의 자신의 종류의 혼란을 방지하는 방법 위의 쇼. 귀하의 데이터 항목 (MyObject)은 IsSelected 속성을 가지고 있으며 변환기 리소스를 어딘가에 시각적 트리에 넣었다고 가정합니다.

IsSelected이 변경되면 변환기를 벗어나 상태 변경을 트리거 할 수 있지만 아이디어를 얻을 수 있습니다.

   <DataTemplate.Triggers> 
        <Trigger Property="IsSelected" Value="False"> 
         <Setter Property="Opacity" Value="Yourvalue"/> 
        </Trigger> 
        <DataTrigger Binding="{Binding IsSelected}" Value="False"> 
         <Setter Property="Opacity" Value="Yourvalue"/> 
        </DataTrigger> 
       </DataTemplate.Triggers> 
:
1

난 아주 간단한 해결책 그런 중 트리거 또는 DataTrigger, 뭔가를 사용하여 "에 isSelected"속성을 사용하는 데이터 템플릿에 트리거를 추가 할 것이라고 생각
관련 문제