1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- using System;
- using System.Windows;
- using System.Windows.Data;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- namespace HandyControl.Controls;
- public class ImagePropertyEditor : PropertyEditorBase
- {
- public override FrameworkElement CreateElement(PropertyItem propertyItem)
- {
- var imageSelector = new ImageSelector
- {
- IsEnabled = !propertyItem.IsReadOnly,
- Width = 50,
- Height = 50,
- HorizontalAlignment = HorizontalAlignment.Left
- };
- BindingOperations.SetBinding(this, UriProperty, new Binding(ImageSelector.UriProperty.Name)
- {
- Source = imageSelector,
- Mode = BindingMode.OneWay
- });
- return imageSelector;
- }
- internal static readonly DependencyProperty UriProperty = DependencyProperty.Register(
- nameof(Uri), typeof(Uri), typeof(ImagePropertyEditor), new PropertyMetadata(default(Uri), OnUriChangedCallback));
- private static void OnUriChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) =>
- ((ImagePropertyEditor) d).Source = e.NewValue is Uri uri ? BitmapFrame.Create(uri) : null;
- internal Uri Uri
- {
- get => (Uri) GetValue(UriProperty);
- set => SetValue(UriProperty, value);
- }
- public static readonly DependencyProperty SourceProperty = DependencyProperty.Register(
- nameof(Source), typeof(ImageSource), typeof(ImagePropertyEditor), new PropertyMetadata(default(ImageSource)));
- public ImageSource Source
- {
- get => (ImageSource) GetValue(SourceProperty);
- set => SetValue(SourceProperty, value);
- }
- public override void CreateBinding(PropertyItem propertyItem, DependencyObject element)
- => BindingOperations.SetBinding(this, GetDependencyProperty(),
- new Binding($"({propertyItem.PropertyName})")
- {
- Source = propertyItem.Value,
- Mode = GetBindingMode(propertyItem),
- UpdateSourceTrigger = GetUpdateSourceTrigger(propertyItem),
- Converter = GetConverter(propertyItem)
- });
- public override DependencyProperty GetDependencyProperty() => SourceProperty;
- }
|