13

スタックパネル内にあるTreeViewItemに表示したいアイコンファイルをResources.resx内に含めました。

1)この目的で.icoファイルを使用できますか?または、.bmpまたはjpgである必要がありますか?

2)XAMLのようにソースを何に設定しますか?次のコードは私にはうまくいきませんでした

<StackPanel Orientation="Horizontal">
    <Image Margin="2" Source="/Resources/Folder_Back.ico" />
    <TextBlock Margin="2" Text="{Binding ProgramName}"
     Foreground="White" FontWeight="Bold"/>
</StackPanel>
4

5 に答える 5

11

リソースファイルの画像にアクセスするための秘訣は次のとおりです。

XAMLマークアップのリソースファイルから画像にアクセスする

まず、次のようなプロジェクトプロパティへの参照を追加する必要があります。

xmlns:properties="clr-namespace:MyProject.Properties"

次に、次のようにXAML経由でアクセスします。

<image source="{Binding Source={x:Static properties:Resources.ImageName}}" />

PNG / JPG / BMPとICOファイルを使用できますが、誰もがPNGをお勧めします。

于 2012-09-11T06:38:44.057 に答える
8

Qorbaniのソリューションを機能させるには、ImageSource.Bindingにコンバーターを追加します。

XAML-名前空間

 xmlns:properties="clr-namespace:YourNameSpace.Properties"
 xmlns:converter="clr-namespace:YourNameSpace.Converter"

Xaml-リソース(UserControlまたはWindow)

 <UserControl.Resources>
        <ResourceDictionary>
              <converter:BitmapToImageSourceConverter x:Key="BitmapToImageSourceConverter" />
        </ResourceDictionary>
 </UserControl.Resources>

Xamlコード

<StackPanel Orientation="Horizontal">
                    <Image Width="32" Height="32" Source="{Binding Source={x:Static properties:Resources.Import}, Converter={StaticResource BitmapToImageSourceConverter}}" Stretch="Fill" />
                    <TextBlock Margin="5" HorizontalAlignment="Center" VerticalAlignment="Center">Import</TextBlock>
</StackPanel>

BitmapToImageSourceConverter.cs

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Windows.Data;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace YourNameSpace
{
    public class BitmapToImageSourceConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var bitmap = value as System.Drawing.Bitmap;
            if (bitmap == null)
                throw new ArgumentNullException("bitmap");

            var rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);

            var bitmapData = bitmap.LockBits(
                rect,
                ImageLockMode.ReadWrite,
                System.Drawing.Imaging.PixelFormat.Format32bppArgb);

            try
            {
                var size = (rect.Width * rect.Height) * 4;

                return BitmapSource.Create(
                    bitmap.Width,
                    bitmap.Height,
                    bitmap.HorizontalResolution,
                    bitmap.VerticalResolution,
                    PixelFormats.Bgra32,
                    null,
                    bitmapData.Scan0,
                    size,
                    bitmapData.Stride);
            }
            finally
            {
                bitmap.UnlockBits(bitmapData);
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}
于 2016-06-16T08:13:21.547 に答える
7

あなたはそれをすることはできません。WinFormでのみ機能しました

詳細については、この投稿を参照してください

リソースに画像を追加する別の方法

この投稿に示されている方法を使用してください

WPFイメージリソース

代わりは

引用:

画像を複数の場所で使用する場合は、画像データを1回だけメモリにロードしてから、すべてのImage要素間で共有することをお勧めします。

これを行うにはBitmapSource 、リソースとしてをどこかに作成します。

<BitmapImage x:Key="MyImageSource" UriSource="../Media/Image.png" />

次に、コードで次のようなものを使用します。

<Image Source="{StaticResource MyImageSource}" />

私の場合、ファイルを単に。ではなくImage.pngビルドアクションを持つように設定する必要があることがわかりました。これにより、コンパイルされたアセンブリ内でイメージが運ばれます。ResourceContent

于 2012-09-11T06:29:38.410 に答える
3

受け入れられた回答は、それは不可能であり、実用的なソリューションはGDI+BitmapタイプをWPFイメージに変換すると述べています。しかし、それらの変換は完全に不要です。解決策は実際には本当に簡単です:

  1. 画像またはアイコンファイルをリソースファイルに追加すると、デザイナーはデフォルトでそれらのGDI+タイプを選択します。

ここに画像の説明を入力してください

  1. XMLエディターで.resxファイルを開き(ソリューションエクスプローラーで右クリックして[プログラムから開く...])、次のように変更BitmapしてIcon入力しますMemoryStream
<!--<value>..\Resources\Undo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>-->
<value>..\Resources\Undo.png;System.IO.MemoryStream</value>

...

<!--<value>..\Resources\Error.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>-->
<value>..\Resources\Error.ico;System.IO.MemoryStream</value>

  1. .resxファイルを保存します。ここでデザイナーを開くと、[その他]メニューからリソースを見つけることができます。

ここに画像の説明を入力してください

'fixing'を気にしないでくださいResources.cs。.resxファイルを保存すると、正しいタイプで自動的に再生成されます。生成されるリターンタイプは実際にはなりますがUnmanagedMemoryStream、混同しないでください。

  1. 使用法:
public static class WpfImages
{
    public static ImageSource Error { get; } = BitmapFrame.Create(Resources.Error);
    // [...]
}
<Image Source="{x:Static local:WpfImages.Error}"/>
于 2019-07-18T17:24:51.980 に答える
1

最初に:リソースrsxを追加し、次に:イメージをイメージとしてリソースファイルに追加し、イメージビルドアクションをリソースに設定します。これで、次のような画像にアクセスできます。

<Image Source="pack://application:,,,/Resources/image.png"/>
于 2018-11-25T17:33:59.383 に答える