21

実行時に画像をWPFウィンドウにロードするのは非常に複雑なようです。

Image image;
image = new Uri("Bilder/sas.png", UriKind.Relative);
????.Source = new BitmapImage(image);

私はこのコードを試していますが、それを機能させるためにいくつかの助けが必要です。コードの下に赤い線が表示されます。また、XAMLコード内にコードを追加する必要があるのか​​、それともこれで十分かどうかも疑問に思います。

<Image Height="200" HorizontalAlignment="Left" Margin="12,12,0,0" Name="image1" 
       Stretch="Fill" VerticalAlignment="Top" Width="350" />

XAMLタグ内の画像のソースを使用した例を見たことがあるので不思議です。

編集:

私は今これを使用しています:

var uri = new Uri("pack://application:,,,/sas.png");
var bitmap = new BitmapImage(uri);
image1.Source = bitmap;

XAML:

<Grid Width="374">
    <Image Height="200" HorizontalAlignment="Left" Margin="12,12,0,0" Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="350" />
    <Button Content="Start" Height="23" HorizontalAlignment="Left" Margin="12,226,0,0" Name="btnStart" VerticalAlignment="Top" Width="75" />
    <Button Content="Land" Height="23" HorizontalAlignment="Left" Margin="287,226,0,0" Name="btnLand" VerticalAlignment="Top" Width="75" />
    <ComboBox Height="23" HorizontalAlignment="Left" Margin="110,226,0,0" Name="cmbChangeRoute" VerticalAlignment="Top" Width="156" />
</Grid>

編集2:私の問題は解決しました、このコードは正常に動作します:

BitmapImage image = new BitmapImage(
    new Uri("pack://application:,,,/Resources/" + company + ".png"));
image2.Source = image;
4

2 に答える 2

43

WPFでは、画像は通常、ストリームまたはURIから読み込まれます。

BitmapImageは両方をサポートし、Uriをコンストラクター引数として渡すこともできます。

var uri = new Uri("http://...");
var bitmap = new BitmapImage(uri);

画像ファイルがローカルフォルダにある場合は、file://URIを使用する必要があります。次のようなパスからこのようなURIを作成できます。

var path = Path.Combine(Environment.CurrentDirectory, "Bilder", "sas.png");
var uri = new Uri(path);

イメージファイルがアセンブリリソースである場合、UriはPackUriスキームに従う必要があります

var uri = new Uri("pack://application:,,,/Bilder/sas.png");

この場合、のVisualStudioビルドアクションはでsas.pngある必要がありますResource

を作成し、このXAMLのような画像BitmapImageコントロールを作成したら

<Image Name="image1" />

BitmapImageをSourceそのImageコントロールのプロパティに割り当てるだけです。

image1.Source = bitmap;
于 2012-08-09T10:42:36.553 に答える
5

あなたがそのVisual Studioでsas.pngマークされてBuild Action: Contentいることを確認してください...Copy To Output Directory: Copy AlwaysProperties

C# のソース コードは次のようになると思います...

Image image = new Image();
image.Source = (new ImageSourceConverter()).ConvertFromString("pack://application:,,,/Bilder/sas.png") as ImageSource;

そしてXAMLは

<Image Height="200" HorizontalAlignment="Left" Margin="12,12,0,0" 
       Name="image1" Stretch="Fill" VerticalAlignment="Top" 
       Source="../Bilder/sas.png"
       Width="350" />  

編集

動的には、XAML がイメージをロードする最良の方法を提供すると思います...

<Image Source="{Binding Converter={StaticResource MyImageSourceConverter}}"
       x:Name="MyImage"/>

パスはどこimage.DataContextですか。string

MyImage.DataContext = "pack://application:,,,/Bilder/sas.png";

public class MyImageSourceConverter : IValueConverter
{
    public object Convert(object value_, Type targetType_, 
    object parameter_, System.Globalization.CultureInfo culture_)
    {
        return (new ImageSourceConverter()).ConvertFromString (value.ToString());
    }

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

別のデータ コンテキストを設定するとImage、実行時に自動的に読み込まれます。

于 2012-08-09T10:09:24.150 に答える