123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- using System;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using HandyControl.Data;
- using HandyControl.Interactivity;
- using Microsoft.Win32;
- namespace HandyControl.Controls;
- public class ImageSelector : Control
- {
- public static readonly RoutedEvent ImageSelectedEvent =
- EventManager.RegisterRoutedEvent("ImageSelected", RoutingStrategy.Bubble,
- typeof(RoutedEventHandler), typeof(ImageSelector));
- public event RoutedEventHandler ImageSelected
- {
- add => AddHandler(ImageSelectedEvent, value);
- remove => RemoveHandler(ImageSelectedEvent, value);
- }
- public static readonly RoutedEvent ImageUnselectedEvent =
- EventManager.RegisterRoutedEvent("ImageUnselected", RoutingStrategy.Bubble,
- typeof(RoutedEventHandler), typeof(ImageSelector));
- public event RoutedEventHandler ImageUnselected
- {
- add => AddHandler(ImageUnselectedEvent, value);
- remove => RemoveHandler(ImageUnselectedEvent, value);
- }
- public ImageSelector() => CommandBindings.Add(new CommandBinding(ControlCommands.Switch, SwitchImage));
- private void SwitchImage(object sender, ExecutedRoutedEventArgs e)
- {
- if (!HasValue)
- {
- var dialog = new OpenFileDialog
- {
- RestoreDirectory = true,
- Filter = Filter,
- DefaultExt = DefaultExt
- };
- if (dialog.ShowDialog() == true)
- {
- SetValue(UriPropertyKey, new Uri(dialog.FileName, UriKind.RelativeOrAbsolute));
- SetValue(PreviewBrushPropertyKey, new ImageBrush(BitmapFrame.Create(Uri, BitmapCreateOptions.IgnoreImageCache, BitmapCacheOption.None))
- {
- Stretch = Stretch
- });
- SetValue(HasValuePropertyKey, ValueBoxes.TrueBox);
- SetCurrentValue(ToolTipProperty, dialog.FileName);
- RaiseEvent(new RoutedEventArgs(ImageSelectedEvent, this));
- }
- }
- else
- {
- SetValue(UriPropertyKey, default(Uri));
- SetValue(PreviewBrushPropertyKey, default(Brush));
- SetValue(HasValuePropertyKey, ValueBoxes.FalseBox);
- SetCurrentValue(ToolTipProperty, default);
- RaiseEvent(new RoutedEventArgs(ImageUnselectedEvent, this));
- }
- }
- public static readonly DependencyProperty StretchProperty = DependencyProperty.Register(
- nameof(Stretch), typeof(Stretch), typeof(ImageSelector), new PropertyMetadata(default(Stretch)));
- public Stretch Stretch
- {
- get => (Stretch) GetValue(StretchProperty);
- set => SetValue(StretchProperty, value);
- }
- public static readonly DependencyPropertyKey UriPropertyKey = DependencyProperty.RegisterReadOnly(
- "Uri", typeof(Uri), typeof(ImageSelector), new PropertyMetadata(default(Uri)));
- public static readonly DependencyProperty UriProperty = UriPropertyKey.DependencyProperty;
- public Uri Uri
- {
- get => (Uri) GetValue(UriProperty);
- set => SetValue(UriProperty, value);
- }
- public static readonly DependencyPropertyKey PreviewBrushPropertyKey = DependencyProperty.RegisterReadOnly(
- "PreviewBrush", typeof(Brush), typeof(ImageSelector), new PropertyMetadata(default(Brush)));
- public static readonly DependencyProperty PreviewBrushProperty = PreviewBrushPropertyKey.DependencyProperty;
- public Brush PreviewBrush
- {
- get => (Brush) GetValue(PreviewBrushProperty);
- set => SetValue(PreviewBrushProperty, value);
- }
- public static readonly DependencyProperty StrokeThicknessProperty = DependencyProperty.Register(
- nameof(StrokeThickness), typeof(double), typeof(ImageSelector), new FrameworkPropertyMetadata(ValueBoxes.Double1Box, FrameworkPropertyMetadataOptions.AffectsRender));
- public double StrokeThickness
- {
- get => (double) GetValue(StrokeThicknessProperty);
- set => SetValue(StrokeThicknessProperty, value);
- }
- public static readonly DependencyProperty StrokeDashArrayProperty = DependencyProperty.Register(
- nameof(StrokeDashArray), typeof(DoubleCollection), typeof(ImageSelector), new FrameworkPropertyMetadata(default(DoubleCollection), FrameworkPropertyMetadataOptions.AffectsRender));
- public DoubleCollection StrokeDashArray
- {
- get => (DoubleCollection) GetValue(StrokeDashArrayProperty);
- set => SetValue(StrokeDashArrayProperty, value);
- }
- public static readonly DependencyProperty DefaultExtProperty = DependencyProperty.Register(
- nameof(DefaultExt), typeof(string), typeof(ImageSelector), new PropertyMetadata(".jpg"));
- public string DefaultExt
- {
- get => (string) GetValue(DefaultExtProperty);
- set => SetValue(DefaultExtProperty, value);
- }
- public static readonly DependencyProperty FilterProperty = DependencyProperty.Register(
- nameof(Filter), typeof(string), typeof(ImageSelector), new PropertyMetadata("(.jpg)|*.jpg|(.png)|*.png"));
- public string Filter
- {
- get => (string) GetValue(FilterProperty);
- set => SetValue(FilterProperty, value);
- }
- public static readonly DependencyPropertyKey HasValuePropertyKey = DependencyProperty.RegisterReadOnly(
- "HasValue", typeof(bool), typeof(ImageSelector), new PropertyMetadata(ValueBoxes.FalseBox));
- public static readonly DependencyProperty HasValueProperty = HasValuePropertyKey.DependencyProperty;
- public bool HasValue
- {
- get => (bool) GetValue(HasValueProperty);
- set => SetValue(HasValueProperty, ValueBoxes.BooleanBox(value));
- }
- }
|