2010-08-09 84 views
2

我在datagrid中的内容为真/假的列,我如何根据文本更改此图像的true/false(布尔值)?将真/假更改为图像

我正在使用c#wpf。

编辑:

<dg:DataGridTemplateColumn MinWidth="70" Header=" Is Done2"> 
    <dg:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Image Name="imgIsDone" Source="../Resources/Activo.png"/> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding Path=IsDone}" Value="False"> 
        <Setter TargetName="imgIsDone" Property="Source" Value="../Resources/Inactivo.png"/> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
    </dg:DataGridTemplateColumn.CellTemplate> 
</dg:DataGridTemplateColumn> 

回答

9

使用一个DataGridTemplateColumn提供一个DataTemplate用于包含图像的列,使用的值转换器或一个数据触发器来设置基于列的值的图像源。下面是一个使用数据触发的例子:

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Image Name="MyImage" Source="TrueImage.png"/> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding BoolColumn}" Value="False"> 
        <Setter TargetName="MyImage" Property="Source" Value="FalseImage.png"/> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 
+0

刚编辑主题,到我有的代码,并给我一个错误。 首先说:文件...不是项目的一部分,或者它的“构建动作”没有设置为资源.. 当我运行它时,行 表示'在'System.Windows.Baml2006.TypeConverterMarkupExtension'上提供值会引发异常。'行号“64”和行位置“46”。 – Luis 2010-08-10 09:42:22

11
public class BoolToImage : IValueConverter 
{ 
    public Image TrueImage { get; set; } 
    public Image FalseImage { get; set; } 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (!(value is bool)) 
     { 
      return null; 
     } 

     bool b = (bool)value; 
     if (b) 
     { 
      return this.TrueImage; 
     } 
     else 
     { 
      return this.FalseImage; 
     } 
    } 

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

然后,作为一种资源:

<local:BoolToImage TrueImage="{StaticResource Image}" FalseImage="{StaticResource FalseImage}" x:Key="BoolImageConverter"/> 

然后在你的绑定:

ImageSource={Binding Path=BoolProp,Converter={StaticResource BoolImageConverter}}"