2014-04-01 5 views
1

안녕하세요 저는 이미지 객체가 null 일 때 가시성을 숨겨야하는 트리거를 사용하여 가시성을 바인딩하려고합니다. treeviewitem의 자식 요소에 대한 가시성 바인딩

<Style TargetType="{x:Type local:DirectoryTreeView}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type local:DirectoryTreeView}"> 
        <Border Background="{TemplateBinding Background}" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}"> 
         <TreeView Name="PART_DirectoryTree"> 
          <TreeView.ItemContainerStyle> 
           <Style TargetType="TreeViewItem"> 
            <Setter Property="IsExpanded" Value="{Binding StartExpanded}"></Setter> 
            <Style.Triggers> 
             <DataTrigger Binding="{Binding Path=Source, Source=Icon}"> 
              <Setter Property="Visibility" Value="Hidden"></Setter> 
             </DataTrigger> 
            </Style.Triggers> 
           </Style> 
          </TreeView.ItemContainerStyle> 
          <TreeView.ItemTemplate> 
           <HierarchicalDataTemplate ItemsSource="{Binding Children}"> 
            <StackPanel Orientation="Horizontal"> 
             <Image Name="Icon" Width="16" Height="16" Source="{Binding Image}"/> 
             <TextBlock Text=" "></TextBlock> 
             <TextBlock Text="{Binding HeaderText}"></TextBlock> 
            </StackPanel> 
           </HierarchicalDataTemplate> 
          </TreeView.ItemTemplate> 
         </TreeView> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

지금까지 내가 트리거와 datatrigger, 나는 datatrigger의 세터에에서 targetName 속성을 사용하여 시도 처음으로 모두를 시도했다, 그러나 나는 컴파일러 오류가 발생했습니다. 어떻게 바인딩 요구 사항을 말해 줄 수>

<datatrigger binding={binding Image}> 
    <setter targetname="Icon" property="Visibility" value="Hidden"/> 
</datatrigger> 

누구

작동하지 == 제대로 수행 할? 당신이 그것을 접근하는 경우

<BitmapImage x:Key="ErrorImage" UriSource="Images/Error.png" /> 

<Image Source="{Binding Path=Image, 
         TargetNullValue={StaticResource ErrorImage}}" /> 

, 컨버터보다 사용하기 쉬울 것입니다 : 소스가 널 (null) 될 경우

+0

'Image = null'일 때 TreeViewItem을 숨기시겠습니까? –

+0

그냥 GUI가 엉망이라고 생각했기 때문에 그냥 이미지가 아니지만, 완전히 다른 무언가 였을 수도 있습니다. 지금은 변환기를 사용했는데 내 UI 문제가 해결되지 않은 것처럼 보입니다. 어쨌든이 질문은 아마도 취소 될 수 있습니다. – woutervs

답변

1

이미지에서 값 변환기를 사용하여 완전히 다른 접근 방식을 사용하여이를 해결했습니다. (아마이 어쨌든 의미 아니에요)

public class VisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var hiddenType = parameter.ToString().ToLowerInvariant() == "collapsed" 
      ? Visibility.Collapsed 
      : Visibility.Hidden; 
     return value == null ? hiddenType : Visibility.Visible; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new Exception("Cannot convert back from visibility to object."); 
    } 
} 

내가하고 싶은 방법을 결합 할 수있는 가능한 방법을 찾을하지 않는 것,이 좋은 솔루션입니다.

<Image Visibility="{Binding Image,ConverterParameter=Collapsed, Converter={StaticResource VisibilityConverter}}" Width="16" Height="16" Source="{Binding Image}"/> 
2

당신은 기본 Image를 작성하고 TargetNullValue를 사용할 수 있습니다.

+0

그것은 내가 달성하고자하는 것이 정확히 아니지만, 다른 상황에서 좋은 해결책이 될 것입니다. – woutervs

관련 문제