Saya mencoba mengatur sumber gambar WPF dalam kode. Gambar tertanam sebagai sumber daya dalam proyek. Dengan melihat contoh-contoh saya telah datang dengan kode di bawah ini. Untuk beberapa alasan itu tidak berfungsi - gambar tidak muncul.
Dengan men-debug saya dapat melihat bahwa stream berisi data gambar. Jadi apa yang salah?
Assembly asm = Assembly.GetExecutingAssembly();
Stream iconStream = asm.GetManifestResourceStream("SomeImage.png");
PngBitmapDecoder iconDecoder = new PngBitmapDecoder(iconStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
ImageSource iconSource = iconDecoder.Frames[0];
_icon.Source = iconSource;
Ikon didefinisikan seperti ini: <Image x:Name="_icon" Width="16" Height="16" />
<Image Source="some_fully_qualified_path">
di XAML tidak pernah gagal.Jawaban:
Setelah mengalami masalah yang sama seperti Anda dan membaca, saya menemukan solusinya - Pak URI .
Saya melakukan hal berikut dalam kode:
Atau lebih pendek, dengan menggunakan konstruktor BitmapImage lain:
URI pecah menjadi beberapa bagian:
application:///
Path: Nama file sumber daya yang dikompilasi ke dalam rujukan yang direferensikan. Path harus sesuai dengan format berikut:
AssemblyShortName[;Version][;PublicKey];component/Path
Tiga garis miring setelah itu
application:
harus diganti dengan koma:Dan tentu saja, pastikan Anda menetapkan action build pada gambar Anda
Resource
.sumber
BitmapImage(Uri)
konstruktor, yang membantu menghindari kebutuhan untuk memanggil BeginInit dan EndInit. Saya sudah menambahkannya di sini.Ini akan memuat gambar yang disebut "Untitled.png" dalam folder yang disebut "Gambar" dengan "Build Action" yang disetel ke "Sumber Daya" dalam majelis yang disebut "WpfApplication1".
sumber
var uriSource = new Uri("Images/Untitled.png", UriKind.Relative);
akan cukupIni adalah kode yang sedikit lebih sedikit dan dapat dilakukan dalam satu baris.
sumber
Sangat mudah:
Untuk mengatur gambar item menu secara dinamis, hanya lakukan hal berikut:
... sedangkan "icon.ico" dapat ditemukan di mana saja (saat ini terletak di direktori 'Resources') dan harus ditautkan sebagai Resource ...
sumber
Anda juga dapat mengurangi ini menjadi satu baris. Ini adalah kode yang saya gunakan untuk mengatur Ikon untuk jendela utama saya. Ini mengasumsikan file .ico ditandai sebagai Konten dan sedang disalin ke direktori output.
sumber
Cara termudah:
sumber
Sudahkah Anda mencoba:
sumber
Ini cara saya:
Pemakaian:
sumber
Berikut adalah contoh yang menetapkan jalur gambar secara dinamis (gambar yang terletak di suatu tempat di disk daripada membangun sebagai sumber daya):
Refleksi pada Ikon ...
Pikiran pertama, Anda akan berpikir bahwa properti Ikon hanya dapat berisi gambar. Tetapi sebenarnya bisa mengandung apa saja! Saya menemukan ini secara tidak sengaja ketika saya mencoba untuk mengatur
Image
properti secara langsung ke string dengan path ke gambar. Hasilnya adalah itu tidak menunjukkan gambar, tetapi teks sebenarnya dari path!Ini mengarah ke alternatif untuk tidak harus membuat gambar untuk ikon, tetapi gunakan teks dengan font simbol sebagai gantinya untuk menampilkan "ikon" sederhana. Contoh berikut menggunakan font Wingdings yang berisi simbol "floppydisk". Simbol ini benar-benar karakter
<
, yang memiliki arti khusus dalam XAML, jadi kita harus menggunakan versi yang disandikan<
. Ini bekerja seperti mimpi! Berikut ini menunjukkan simbol floppydisk sebagai ikon pada item menu:sumber
Jika gambar Anda disimpan dalam ResourceDictionary, Anda dapat melakukannya hanya dengan satu baris kode:
sumber
Ada juga cara yang lebih sederhana. Jika gambar dimuat sebagai sumber daya dalam XAML, dan kode yang dimaksud adalah kode di belakang untuk konten XAML itu:
sumber
Masukkan bingkai ke dalam VisualBrush:
Masukkan VisualBrush di GeometryDrawing
Sekarang masukkan GeometryDrawing dalam DrawingImage:
Tempatkan ini di sumber gambar Anda, dan voila!
Anda bisa melakukannya dengan lebih mudah:
Dan dalam kode:
sumber
Ada juga cara yang lebih sederhana. Jika gambar dimuat sebagai sumber daya dalam XAML, dan kode yang dimaksud adalah codebehind untuk XAML itu:
Berikut kamus sumber daya untuk file XAML - satu-satunya baris yang Anda pedulikan adalah ImageBrush dengan kunci "PosterBrush" - sisa kode hanya untuk menunjukkan konteks
Sekarang, dalam kode di belakang, Anda bisa melakukan ini
sumber
Cara memuat gambar dari tertanam di ikon sumber daya dan gambar (versi terkoreksi dari Arcturus):
Misalkan Anda ingin menambahkan tombol dengan gambar. Apa yang harus kamu lakukan
Sekarang saatnya memuat gambar kita di XAML
Selesai
sumber
Saya baru mengenal WPF, tetapi tidak di .NET.
Saya telah menghabiskan lima jam mencoba untuk menambahkan file PNG ke "Proyek Perpustakaan Kontrol Kontrol WPF" di. NET 3.5 (Visual Studio 2010) dan menetapkannya sebagai latar belakang kontrol yang diwarisi gambar.
Tidak ada yang relatif dengan URI bekerja. Saya tidak bisa membayangkan mengapa tidak ada metode untuk mendapatkan URI dari file sumber daya, melalui IntelliSense, mungkin sebagai:
Saya sudah mencoba banyak URI dan bermain dengan ResourceManager, dan metode GetManifest Assembly, tetapi semua ada pengecualian atau nilai NULL.
Di sini saya membuat kode yang berfungsi untuk saya:
sumber
Jika Anda sudah memiliki aliran dan mengetahui formatnya, Anda dapat menggunakan sesuatu seperti ini:
sumber
Anda baru saja melewatkan sedikit.
Untuk mendapatkan sumber daya yang tertanam dari majelis apa pun, Anda harus menyebutkan nama majelis dengan nama file Anda seperti yang telah saya sebutkan di sini:
sumber