c# - WPF 绑定(bind)到图像(位图)转换器未显示

标签 c# wpf data-binding converters prism-5

我在使用转换器从本地目录创建图像时遇到图像未显示在 WPF 控件中的问题。任何有关我做错的事情的指示将不胜感激。

XAML

<UserControl x:Class="Coms.Views.ImageDetailView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:c="clr-namespace:Coms.Converter"
         mc:Ignorable="d" 
         d:DesignHeight="100" d:DesignWidth="300" Background="Wheat">
<Control.Resources>
    <c:ImageDetailConverter x:Key="converter" />
</Control.Resources>
<ListBox ItemsSource="{Binding icList}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="100"/>
                    <ColumnDefinition Width="200"/>
                </Grid.ColumnDefinitions>
                <Image Name="imgBox" Width="auto" Height="auto" Grid.Column="0" Source="{Binding Converter={StaticResource converter}}" />
                <TextBlock Name="txtBlock2" Grid.Column="1" Text="{Binding coordinates}"/>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

public class ImageDetail
{
    public string fileName { get; set; }
    public string coordinates { get; set; }
}

转换器

public class ImageDetailConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        IRuntimeConfigurations configs = ServiceLocator.Current.GetInstance<IRuntimeConfigurations>();
        return new Bitmap(Image.FromFile(Path.Combine(configs.rootImagePath, ((IImageDetail)value).fileName)));
    }
}

最佳答案

您的转换器返回一个 System.Drawing.Bitmap,它是 WinForms,而不是 WPF。

它应该返回一个 WPF ImageSource (例如 BitmapImage ):

public object Convert(
    object value, Type targetType, object parameter, CultureInfo culture)
{
    var imageDetail = (ImageDetail)value;
    var configs = ServiceLocator.Current.GetInstance<IRuntimeConfigurations>();
    var path = Path.Combine(configs.rootImagePath, imageDetail.fileName);
    var uri = new Uri(path, UriKind.RelativeOrAbsolute);

    return new BitmapImage(uri);
}

另请注意,WPF 提供从 Uristring(包含有效 URI)到 ImageSource 的内置类型转换,以便您转换器还可以返回 uripath 值。

关于c# - WPF 绑定(bind)到图像(位图)转换器未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31276437/

相关文章:

c# - 无法从 C# Windows 应用程序连接到 MySQL

c# - 是否可以在服务器应用程序中利用 WPF 属性系统?

c# - 绑定(bind)到 XAML 中的子 ViewModel 集合

c# - 如何使用 sharpmap 在地球上渲染一个国家的图像

c# - 如何按数字顺序排列文件的内容?

c# - 将 3D 点投影到 2D 屏幕坐标

.net - 使用 ViewModel 中定义的 RelayCommand 传递参数(来自 Josh Smith 示例)

c# - DataBinding 与 entityframework 错误

java - Android Studio 中未生成 MainActivityBinding 文件

c# - 可以将条件编译符号添加到 csproj.user 文件吗?