c# resources - WPF圖像資源




image load (9)

完整描述如何使用資源: https://msdn.microsoft.com/en-us/library/aa970494(v=vs.100).aspx : https://msdn.microsoft.com/en-us/library/aa970494(v=vs.100).aspx以及如何引用它們閱讀“在WPF中打包URI”

簡而言之,甚至有引用/引用程序集引用資源的方法

我主要來自網頁和一些Windows窗體背景。 對於一個新項目,我們將使用WPF。 出於說明目的,WPF應用程序需要10-20個小圖標和圖像。 我正在考慮將這些作為嵌入式資源存儲在程序集中。 這是正確的路嗎?

如何在XAML中指定Image控件應該從嵌入資源加載圖像?


  1. Visual Studio 2010 Professional SP1。
  2. .NET Framework 4客戶端配置文件。
  3. PNG圖像作為資源添加到項目屬性中。
  4. 資源文件夾中的新文件自動創建。
  5. 構建操作設置為資源。

這對我有效:

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

是的,這是正確的方式。 您只需使用路徑即可在資源文件中使用該映像:

<Image Source="..\Media\Image.png" />

您必須將圖像文件的構建操作設置為“資源”


是的,這是正確的方式。 您可以在資源文件使用路徑中使用圖像

<StackPanel Orientation="Horizontal">
    <CheckBox  Content="{Binding Nname}" IsChecked="{Binding IsChecked}"/>
    <Image Source="E:\SWorking\SharePointSecurityApps\SharePointSecurityApps\SharePointSecurityApps.WPF\Images\sitepermission.png"/>
    <TextBlock Text="{Binding Path=Title}"></TextBlock>
</StackPanel>

我發現使用圖像,視頻等最佳做法是:

  • 將您的文件“構建操作”更改為“內容” 。 一定要選中Copy to build directory
    • 在“解決方案資源管理器”窗口的“右鍵單擊”菜單中找到
  • 圖像來源格式如下:
    • “/ «YourAssemblyName» ;組件/«YourPath»/«YourImage.png»

<Image Source="/WPFApplication;component/Images/Start.png" />

優點:

  • 文件沒有嵌入到程序集中
    • 資源管理器會通過太多的資源(在構建時)提出一些內存溢​​出問題,
  • 可以在程序集之間調用

如果您將在多個地方使用圖像,那麼將圖像數據只加載到內存中並在所有Image元素之間共享圖像數據是值得的。

為此,請創建一個BitmapSource作為某處的資源:

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

然後,在您的代碼中,使用如下所示的內容:

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

就我而言,我發現我必須將Image.png文件設置為具有Resource的構建操作,而不僅僅是Content 。 這會導致圖像被載入您的編譯程序集。


如果您使用的是融合,為了讓它變得更加簡單,並且在獲取Source屬性的正確路徑時沒有任何問題,只需將圖像從“項目”面板拖放到設計器上即可。


這工作

並且要設置的圖像是屬性中的資源

    var bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(MyProject.Properties.Resources.myImage.GetHbitmap(),
                                      IntPtr.Zero,
                                      Int32Rect.Empty,
                                      BitmapSizeOptions.FromEmptyOptions());
    MyButton.Background = new ImageBrush(bitmapSource);
img_username.Source = bitmapSource;

出於擴展方法的目的,無法區分匿名類型。 擴展方法通過為編譯時可命名類型指定方法來工作。 匿名類型是不可命名的,因此在編譯時不可見。 這使它們與擴展方法不兼容。





c# .net wpf embedded-resource