【问题标题】:boolean converter to print an image, just print the image name c#布尔转换器打印图像,只需打印图像名称 c#
【发布时间】:2014-11-26 01:24:06
【问题描述】:

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

我想用两张图片来替换它,一张为真,一张为假。

这是数据网格:

<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 显示的内容。现在它为 TRUE 和“booleanFalse.png”显示“booleanTrue.png”,但它不显示图像。

如何显示它们,在我的 DataGrid 中打印这些图像时缺少什么?

提前感谢您的帮助。

【问题讨论】:

    标签: c# wpf datagrid boolean ivalueconverter


    【解决方案1】:

    您将需要模板列而不是使用 DataGridTextColumn,以在此列中显示图像并仅在此模板列中应用您的绑定。让我带你去看看

    你的数据网格应该是这样的

    <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();
            }
    

    【讨论】:

    • 转换器不一定要返回Uris。它也可以是字符串,因为 WPF 的内置类型转换为类型 ImageSource(Image 控件的 Source 属性的类型)适用于两者。此外,当图像存储为程序集资源时(我会从 OP 假设),您必须返回有效的Resource File Pack URIs。另一种选择是直接创建并返回 BitmapImage 或 BitmapFrame 实例。
    【解决方案2】:

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

    【讨论】:

    • 图片在解决方案的根目录,所以在前面加一个``,是你的意思吗?
    • 不,我的意思是返回如下字符串:
    • 是否可以在 DataGrid.Columns 上返回这样的字符串?我会尽力。 EDIT 似乎是不可能的,它只需要 DataGrid CheckBox/Combobox/Hyperlink/Template/Text 也许其中一个可以让我做我想做的事?
    • DataGridTemplateColumn 似乎是解决方案,我试试。
    • 现在可以了。这就是我所做的:&lt;DataGridTemplateColumn x:Name="PrisEnCompte" Width="50" Header="PEC"&gt; &lt;DataGridTemplateColumn.CellTemplate&gt; &lt;DataTemplate&gt; &lt;Image Source="{Binding Path=Flag, Converter={StaticResource BooleanConverter}}"/&gt; &lt;/DataTemplate&gt; &lt;/DataGridTemplateColumn.CellTemplate&gt; &lt;/DataGridTemplateColumn&gt;
    猜你喜欢
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    相关资源
    最近更新 更多