将布尔转换器用于打印图像,只需打印图像名称 c#

3

我有一个包含布尔值的DataGridTextColumn,这些布尔值在列上返回TRUE或FALSE。

我想用两个图像来替换它,一个用于TRUE,一个用于FALSE。

这是DataGrid:


(Note: HTML tags have been preserved.)
<DataGrid x:Name="DonneesBrutes" IsReadOnly="True" ItemsSource="{Binding Path=ResultatCollectionGrande}" Margin="10,65,0,0" AutoGenerateColumns="False" EnableRowVirtualization="True" RowDetailsVisibilityMode="VisibleWhenSelected">

            <DataGrid.Columns>
                <DataGridTextColumn x:Name="PrisEnCompte" Width="50" Binding="{Binding Path=Flag, Converter={StaticResource BooleanConverter}}" Header="PEC"></DataGridTextColumn>

使用资源:

 <Window.Resources>
    <local:BooleanConverter x:Key="BooleanConverter"/>
</Window.Resources>

这是转换器:
public class BooleanConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value.Equals(true)) return @"booleanTrue.png";
        return @"booleanFalse.png";
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

转换器有效,它改变了我的DataGridTextColumn显示的内容。现在它显示的是"booleanTrue.png"表示TRUE和"booleanFalse.png"表示FALSE,但它没有显示这些图片。
我应该如何显示这些图片?我需要做什么才能在我的DataGrid中打印这些图像?
感谢您的帮助。
2个回答

1

不要使用DataGridTextColumn,而是需要使用模板列来在此列中显示图像,并仅在此模板列中应用绑定。让我向您展示方法。

您的datagrid应该如下所示:

<DataGrid x:Name="DonneesBrutes" IsReadOnly="True" ItemsSource="{Binding Path=ResultatCollectionGrande}" Margin="10,65,0,0" AutoGenerateColumns="False" EnableRowVirtualization="True" RowDetailsVisibilityMode="VisibleWhenSelected">
 <DataGrid.Columns>
   <DataGridTemplateColumn Header="PEC" x:Name="PrisEnCompte">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Image Height="50" Width="50" Source="{Binding Path=Flag, Converter={StaticResource booleanConverter}}"></Image>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

"您的布尔转换器应该像这样。"
 public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value.Equals(true)) 
                return new Uri(@"C:\Users\pj827192\Desktop\Untitled.png");
            return new Uri(@"C:\Users\Public\Pictures\Sample Pictures\Hydrangeas.jpg");
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

1
转换器不一定需要返回Uri。它也可以是字符串,因为WPF内置的类型转换到ImageSource类型(Image控件的“Source”属性的类型)适用于两者。此外,当图像存储为程序集资源时(我会假设来自OP),您必须返回有效的Resource File Pack URIs。另一种选择是直接创建并返回BitmapImage或BitmapFrame实例。 - Clemens

-1
也许你应该返回嵌入图像的标记而不仅仅是图像名称。

图片位于解决方案的根目录,因此在前面添加“\”,这是您的意思吗? - Flo
不,我的意思是返回一个字符串,例如:<img src=”图像的URL” alt=”替代文本” title=”信息提示文本” height=”首选高度” width=”首选宽度” /> - Pieter21
能否在DataGrid.Columns中返回这样的字符串?我试试。编辑似乎不可能,它只接受DataGrid CheckBox/Combobox/Hyperlink/Template/Text。也许其中一个可以让我做我想做的事情? - Flo
DataGridTemplateColumn 似乎是解决方案,我尝试一下。 - Flo
现在它可以工作了。这是我所做的:<DataGridTemplateColumn x:Name="PrisEnCompte" Width="50" Header="PEC"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Image Source="{Binding Path=Flag, Converter={StaticResource BooleanConverter}}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> - Flo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接