内部状態についてユーザーにフィードバックを提供する必要があるWPFアプリケーションがあります。デザインは、赤、黄、緑の3つの画像を使用することです。状態に応じて、これらの画像の1つが一度に表示されます。ポイントは次のとおりです。
- 3つの画像は、分離コードのProperties.Resourcesにあります。
- 一度に表示される画像は1つだけです。
- 状態の変化は、ユーザーからではなく、コードビハインドのプロセスから発生します。
- 画像をコードビハインドから変更できるように、画像コントロールをバインドしたいと思います。
JPG画像を次のような画像ソースに変更するには、画像コンバーターが必要だと思います。
[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();
}
}
初期化中に一度画像を変換し、画像ソースのリストを保持したいと思います。また、コントロールをバインドするために依存関係プロパティが必要になると想定していますが、この画像ソースのリストを使用してそれを設定する方法がわかりません。
// 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); }
}