Kullanıcıya dahili bir durum hakkında geri bildirim sağlaması gereken bir WPF uygulamasına sahibim. Tasarım üç görüntüye sahip olmak, onları Kırmızı, Sarı ve Yeşil olarak adlandırmaktır. Bu görüntülerden biri, duruma bağlı olarak bir seferde görüntülenecektir. İşte noktalar şunlardır:Bir görüntü kaynağını, WPF'deki kod arkasından, Özellikler'deki bir görüntü ile dinamik olarak nasıl değiştiririm?
- üç görüntüleri bir anda gösterilecek görüntülerin kod arkasında
- Sadece birinde Properties.Resources içindedir.
- Durum değişikliği, kullanıcı tarafından değil, kod arkasındaki bir işlemden gelir.
- Görüntü kontrolünü bağlamak istiyorum, böylece görüntüyü arkadan değiştirebiliyorum.
:
[ValueConversion(typeof(System.Drawing.Bitmap), typeof(ImageSource))]
public class BitmapToImageSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var bmp = value as System.Drawing.Bitmap;
if (bmp == null)
return null;
return System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
bmp.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
Ben görüntüleri dönüştürmek için tercih ediyorum Başlatma sırasında bir kez ve Görüntü kaynaklarının bir listesini tutun. Ben de kontrolü bağlamak bir bağımlılık özelliği gerekir sanıyorum ama görüntü kaynaklarının bu liste ile o nasıl kurulacağı emin değilim:
// Dependancy Property for the North Image
public static readonly DependencyProperty NorthImagePathProperty
= DependencyProperty.Register(
"NorthImagePath",
typeof(ImageSource),
typeof(MainWindow),
new PropertyMetadata("**Don't know what goes here!!!**"));
// Property wrapper for the dependancy property
public ImageSource NorthImagePath
{
get { return (ImageSource)GetValue(NorthImagePathProperty); }
set { SetValue(NorthImagePathProperty, value); }
}
Clemens Siz sallanıyorsunuz! Bu fantastik, kapsamlı, anlaşılması kolay bir cevaptı. Bağlama seçeneğini kullanmak için cazip gelmekteyim, fakat benim durumumda, kaynağın kodunu arkasına yerleştirmenin ilk seçeneği sadece çok şık. Tek sorun, png dosyaları ile çalışmak için alamadım. Saydam bir arka plan için umut ediyordum. Png dosyaları ile çalışmalı mı? Yanlış bir şey mi yapıyorum yoksa desteklenmiyor mu? – dtaylor
Bu, PNG dosyalarıyla da çalışmalıdır. Belki de bunları projenize kaynak olarak eklememelisiniz (düzenlememe bakın). Dosyaları favori görüntü aracınızla oluşturun ve bunları projenizdeki bir klasöre ekleyin. Kabul hakkında [bakın] (http://meta.stackexchange.com/a/5235) bakın. – Clemens
Clemens, Yine net ve özlü bir cevap verdiniz! PNG dosyası, bir klasöre koyduğumda ve bunu Kaynak Tasarımcısı'nda bir properties.resource olarak eklemek yerine bir kaynak olarak oluşturduğumda harika çalışır. Bir milyona teşekkürler. – dtaylor