簡體   English   中英

WPF綁定到轉換器的圖像(位圖)未顯示

[英]WPF Binding to converter for an Image (Bitmap) not showing

我在使用Converter從本地目錄創建圖像的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值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM