您好我尝试使用触发器绑定可见性,当图像对象为空时,应隐藏可见性。
<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的setter上使用targetname属性,但后来我遇到了编译器错误。
不工作==&gt;
<datatrigger binding={binding Image}>
<setter targetname="Icon" property="Visibility" value="Hidden"/>
</datatrigger>
任何人都可以告诉我这种绑定是如何正确完成的?
答案 0 :(得分:2)
如果来源 null ,您可以创建默认Image
并使用TargetNullValue
:
<BitmapImage x:Key="ErrorImage" UriSource="Images/Error.png" />
<Image Source="{Binding Path=Image,
TargetNullValue={StaticResource ErrorImage}}" />
如果您接近它,它将比转换器更容易使用。
答案 1 :(得分: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}"/>