WPF görüntü resursları

Vebdən və bir çox Windows Forms fonumundan çox gəlirəm. Yeni layihə üçün WPF istifadə edəcəyik. Bir WPF proqramı, nümunəvi məqsədlər üçün 10-20 kiçik ikon və şəkillər tələb edəcək. Mən məclisdə saxlanılan resurslar kimi saxlamağı düşünürəm. Bu doğru yoludurmu?

XAML-də Image nəzarətinin yerləşdiyi bir mənbədən bir şəkil yükləməyini necə göstərə bilərəm?

361
07 дек. 07 driis dəsti 2008-12-07 17:14 '08 saat 05:14 'da 2008-12-07 17:14
@ 10 cavab

Görüntüyü bir neçə yerdən istifadə edirsinizsə, yalnız bir dəfə yaddaş məlumatını yaddaşa yükləyin və sonra Şəkilin bütün elementləri arasında paylaşmalısınız.

Bunu etmək üçün bir BitmapSource olaraq bir BitmapSource yaradın:

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

Mənim vəziyyətimdə Image.png faylını Image.png deyil, Resource toplusunun hərəkətinə təyin etmək lazımdır. Bu, görüntünün prefabrik yığıncaqda köçürülməsinə səbəb olur.

430
03 марта '09 в 19:02 2009-03-03 19:02 03.03.09 19:02 Drew Noakes'e cavab verildi. 2009-03-03 19:02

Mən şəkilləri, videoları və s.

  • "Fəaliyyəti fərdiləşdirin" fayllarını "Məzmun " a dəyişin. Bir qovluq yaratmaq üçün Kopyayı yoxlayın.
    • "Solution Explorer" penceresindeki "Edit" menyusunda tapıldı.
  • Aşağıdakı formatdakı görüntü mənbəyi:
    • "/"YourAssemblyName";component/"YourPath"/"YourImage.png" ""

bir nümunə

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

Faydaları:

  • Fayllar yığıncaqda qurulmamışdır.
    • Resurs Meneceri, çox vaxt resurslarla (qurma zamanı) yaddaş tıxac problemlərinə səbəb olacaq.
  • Quruluşlar arasında səbəb ola bilər.
152
10 марта '10 в 14:32 2010-03-10 14:32 Cavab Nuno Rodrigues tərəfindən 10 Mart 2010 tarixində 14:32 'də verildi. 2010-03-10 14:32

Bəzi insanlar bu barədə koddan soruşurlar və cavab almırlar.

Saat axtarışından sonra çox sadə bir üsul tapdım, nümunə tapa bilmədim, buna görə də burada şəkillərlə işləyənlərlə bölüşdüm. (mayın .gif idi)

Xülasə:

ImageSource "ünvanları" kimi olan bir BitmapFrame qaytarır.

İstifadə edin:

 doGetImageSourceFromResource ("[YourAssemblyNameHere]", "[YourResourceNameHere]"); 

Metod:

 static internal ImageSource doGetImageSourceFromResource(string psAssemblyName, string psResourceName) { Uri oUri = new Uri("pack://application:,,,/" +psAssemblyName +";component/" +psResourceName, UriKind.RelativeOrAbsolute); return BitmapFrame.Create(oUri); } 

Öyrənmə:

Tecrübemden dolayı paket dize bir problem deyil, akışlarınızı kontrol edin və özellikle ilk defa okuduğunuzda, işaretçiyi faylın sonuna qoyun ve tekrar okunmadan önce tekrar sıfırlamanız lazımdır.

Ümid edirəm ki, bu, bir neçə saat saxlayacaq, mənə bu parça mənim üçün olsun!

41
13 февр. Cavab 13 fevralda Craig tərəfindən verilir . 2011-02-13 19:49 '11 at 19:49 2011-02-13 19:49

Mənim Freq.png image Icons qovluğunda olduğu və Resource :

 this.Icon = new BitmapImage(new Uri(@"pack://application:,,,/" + Assembly.GetExecutingAssembly().GetName().Name + ";component/" + "Icons/Freq.png", UriKind.Absolute)); 

Mən də bir funksiya:

 /// <summary> /// Load a resource WPF-BitmapImage (png, bmp, ...) from embedded resource defined as 'Resource' not as 'Embedded resource'. /// </summary> /// <param name="pathInApplication">Path without starting slash</param> /// <param name="assembly">Usually 'Assembly.GetExecutingAssembly()'. If not mentionned, I will use the calling assembly</param> /// <returns></returns> public static BitmapImage LoadBitmapFromResource(string pathInApplication, Assembly assembly = null) { if (assembly == null) { assembly = Assembly.GetCallingAssembly(); } if (pathInApplication[0] == '/') { pathInApplication = pathInApplication.Substring(1); } return new BitmapImage(new Uri(@"pack://application:,,,/" + assembly.GetName().Name + ";component/" + pathInApplication, UriKind.Absolute)); } 

Istifadə edin (funksiyanı ResourceHelper sinifində qoyursunuz):

 this.Icon = ResourceHelper.LoadBitmapFromResource("Icons/Freq.png"); 

Qeyd : WPF-MSDN Pack URI- ə baxın:
pack://application:,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml

36
16 марта '12 в 16:15 2012-03-16 16:15 Cavab Eric Ouellet tərəfindən 16 Mart '12 'də saat 16:15' da verilir 2012-03-16 16:15

Bəli, bu doğru yoludur.

Yalnızca yolu istifadə edərək, resmin faylında istifadə edə bilərsiniz:

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

Şəkil faylını "Resurs" a yığma hərəkətini təyin etməlisiniz.

35
07 дек. cavab ema 07 dek. 2008-12-07 20:34 '08 at 8:34 pm 2008-12-07 20:34

Resursların tam təsviri: resurslar, məzmun və WPF proqram məlumatları faylları

Və onlara necə bağlanacaqsınız, "WPF-də paket URI" oxuyun.

Bir sözlə, resursları referans / referendum toplantılarından istinad etmək üçün bir vasitə var.

13
13 апр. Apr 13-də techfan tərəfindən verilmiş cavab 2010-04-13 22:12 '10 at 10:12 'da 2010-04-13 22:12
  • Visual Studio 2010 Professional SP1.
  • İstehlakçı Profili. NET Framework 4.
  • PNG təsviri layihə xüsusiyyətlərində bir qaynaq kimi əlavə olunur.
  • Resources qovluğunda yeni bir fayl yaradılıb.
  • Resurs üçün müəyyən edilmiş tədbirlər.

Mənim üçün çalışdı:

 <BitmapImage x:Key="MyImageSource" UriSource="Resources/Image.png" /> 
4
23 авг. Aug 23-də JoanComasFdz tərəfindən verilmiş cavab 2011-08-23 12:16 '11 at 12:16 2011-08-23 12:16

Bəli, bu doğru yoludur. Yolları istifadə edərək, resurs faylında istifadə edə bilərsiniz:

 <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> 
3
24 апр. 24 aprel tarixində Sanjay Ranavaya tərəfindən cavab verildi 2018-04-24 13:47 '18 saat 13:47 'da 2018-04-24 13:47

Daha asan və asanlıqla Source öznitəsindəki problemləri həll etmək üçün Blend istifadə etsəniz, təsvirləri Layihə panelindən dizaynçıya sürətlə sürükləyin.

2
08 дек. user42467 tərəfindən verilmiş cavab 08 dekabr . 2008-12-08 02:52 '08 saat 02:52 'da 2008-12-08 02:52

Aşağıdakı əsərləri və təsvirləri quraşdırılacaq xüsusiyyətlər aşağıdakılardır:

  var bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(MyProject.Properties.Resources.myImage.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); MyButton.Background = new ImageBrush(bitmapSource); img_username.Source = bitmapSource; 
-3
09 янв. Cavab Raghulan Gowthaman tərəfindən 09 yanvar 2015-01-09 02:04 '15 at 2:04 2015-01-09 02:04