.net 当图像源有效(非空)时隐藏文本的触发器
因此,我有一个带有图像列的DataGrid,我希望能够在图像具有有效(非空)源时隐藏“浏览…”超链接。如何做到这一点 这是我的XAML:.net 当图像源有效(非空)时隐藏文本的触发器,.net,wpf,.net,Wpf,因此,我有一个带有图像列的DataGrid,我希望能够在图像具有有效(非空)源时隐藏“浏览…”超链接。如何做到这一点 这是我的XAML: <DataGridTemplateColumn Header="Image"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Command="{Binding ChangeImageComman
<DataGridTemplateColumn Header="Image">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Command="{Binding ChangeImageCommand}">
<Button.Template>
<ControlTemplate>
<Grid>
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
<Hyperlink Command="{Binding ChangeImageCommand}">Browse...</Hyperlink>
</TextBlock>
<Image Source="{Binding Image}" Margin="0"/>
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
浏览。。。
哦,如果有更简单的方法来实现带有替代文本的图像按钮,请让我知道!:-) 默认情况下使TextBlock不可见,并为
Image.Source==null
比如:
<DataGridTemplateColumn Header="Image">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Command="{Binding ChangeImageCommand}">
<Button.Template>
<ControlTemplate>
<Grid>
<TextBlock Name="TextBlock" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed">
<Hyperlink Command="{Binding ChangeImageCommand}">Browse...</Hyperlink>
</TextBlock>
<Image Name="Image" Source="{Binding Image}" Margin="0"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger SourceName="Image"
Property="Source"
Value="{x:Null}">
<Setter TargetName="TextBlock"
Property="Visibility"
Value="Visible"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Button.Template>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
浏览。。。
您可以使用ValueConverter将图像绑定到可见性。一个基于空值的简单转换器如下所示:
public class VisibilityConverter : IValueConverter
{
public Visibility True { get; set; }
public Visibility False { get; set; }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (value != null ? True : False);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
<Window.Resources>
<loc:VisibilityConverter x:Key="ImageConverter" True="Visible" False="Collapsed"/>
<loc:VisibilityConverter x:Key="BrowseConverter" True="Collapsed" False="Visible"/>
</Window.Resources>
. . .
<DataGridTemplateColumn Header="Image">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Command="{Binding ChangeImageCommand}">
<Grid>
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center"
Visibility="{Binding Image, Converter={StaticResource BrowseVisibility}}">
Browse...
</TextBlock>
<Image Source="{Binding Image}" Margin="0"
Visibility="{Binding Image, Converter={StaticResource ImageVisibility}}"/>
</Grid>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
您可以在XAML资源中创建几个实例,用于控制元素的可见性。此外,您不需要为按钮设置模板,因为WPF按钮可以包含您希望它们包含的任何内容(不仅仅是文本)。因此,您的XAML可以如下所示:
public class VisibilityConverter : IValueConverter
{
public Visibility True { get; set; }
public Visibility False { get; set; }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (value != null ? True : False);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
<Window.Resources>
<loc:VisibilityConverter x:Key="ImageConverter" True="Visible" False="Collapsed"/>
<loc:VisibilityConverter x:Key="BrowseConverter" True="Collapsed" False="Visible"/>
</Window.Resources>
. . .
<DataGridTemplateColumn Header="Image">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Command="{Binding ChangeImageCommand}">
<Grid>
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center"
Visibility="{Binding Image, Converter={StaticResource BrowseVisibility}}">
Browse...
</TextBlock>
<Image Source="{Binding Image}" Margin="0"
Visibility="{Binding Image, Converter={StaticResource ImageVisibility}}"/>
</Grid>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
. . .
浏览。。。
注意,您还需要在XAML的顶部添加。我还以为你会把这些放在你的窗口资源中。谢谢你添加代码片段——这样做更有意义!