212 lines
6.8 KiB
C#
212 lines
6.8 KiB
C#
|
|
using MainShell.Common;
|
||
|
|
using System;
|
||
|
|
using System.Windows;
|
||
|
|
using System.Windows.Controls;
|
||
|
|
using System.Windows.Data;
|
||
|
|
using System.Windows.Input;
|
||
|
|
using System.Windows.Media;
|
||
|
|
|
||
|
|
namespace MainShell.Resources.CustomControl
|
||
|
|
{
|
||
|
|
public partial class DieMapPanelControl : UserControl
|
||
|
|
{
|
||
|
|
private DieMapPreviewWindow _previewWindow;
|
||
|
|
|
||
|
|
public static readonly DependencyProperty CaptionProperty =
|
||
|
|
DependencyProperty.Register("Caption", typeof(string), typeof(DieMapPanelControl), new PropertyMetadata(string.Empty));
|
||
|
|
|
||
|
|
public static readonly DependencyProperty MapModelProperty =
|
||
|
|
DependencyProperty.Register("MapModel", typeof(DieMapModel), typeof(DieMapPanelControl), new PropertyMetadata(null));
|
||
|
|
|
||
|
|
public static readonly DependencyProperty DieSizeProperty =
|
||
|
|
DependencyProperty.Register("DieSize", typeof(double), typeof(DieMapPanelControl), new PropertyMetadata(8.0));
|
||
|
|
|
||
|
|
public static readonly DependencyProperty SpacingProperty =
|
||
|
|
DependencyProperty.Register("Spacing", typeof(double), typeof(DieMapPanelControl), new PropertyMetadata(1.0));
|
||
|
|
|
||
|
|
public static readonly DependencyProperty MapBackgroundProperty =
|
||
|
|
DependencyProperty.Register("MapBackground", typeof(Brush), typeof(DieMapPanelControl), new PropertyMetadata(new SolidColorBrush(Color.FromRgb(229, 231, 235))));
|
||
|
|
|
||
|
|
public static readonly DependencyProperty CaptionForegroundProperty =
|
||
|
|
DependencyProperty.Register("CaptionForeground", typeof(Brush), typeof(DieMapPanelControl), new PropertyMetadata(new SolidColorBrush(Color.FromRgb(107, 114, 128))));
|
||
|
|
|
||
|
|
public static readonly DependencyProperty MapMarginProperty =
|
||
|
|
DependencyProperty.Register("MapMargin", typeof(Thickness), typeof(DieMapPanelControl), new PropertyMetadata(new Thickness(8)));
|
||
|
|
|
||
|
|
public static readonly DependencyProperty CaptionMarginProperty =
|
||
|
|
DependencyProperty.Register("CaptionMargin", typeof(Thickness), typeof(DieMapPanelControl), new PropertyMetadata(new Thickness(0, 0, 0, 14)));
|
||
|
|
|
||
|
|
public static readonly DependencyProperty DieClickedCommandProperty =
|
||
|
|
DependencyProperty.Register("DieClickedCommand", typeof(ICommand), typeof(DieMapPanelControl), new PropertyMetadata(null));
|
||
|
|
|
||
|
|
public string Caption
|
||
|
|
{
|
||
|
|
get
|
||
|
|
{
|
||
|
|
return (string)GetValue(CaptionProperty);
|
||
|
|
}
|
||
|
|
set
|
||
|
|
{
|
||
|
|
SetValue(CaptionProperty, value);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public DieMapModel MapModel
|
||
|
|
{
|
||
|
|
get
|
||
|
|
{
|
||
|
|
return (DieMapModel)GetValue(MapModelProperty);
|
||
|
|
}
|
||
|
|
set
|
||
|
|
{
|
||
|
|
SetValue(MapModelProperty, value);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public double DieSize
|
||
|
|
{
|
||
|
|
get
|
||
|
|
{
|
||
|
|
return (double)GetValue(DieSizeProperty);
|
||
|
|
}
|
||
|
|
set
|
||
|
|
{
|
||
|
|
SetValue(DieSizeProperty, value);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public double Spacing
|
||
|
|
{
|
||
|
|
get
|
||
|
|
{
|
||
|
|
return (double)GetValue(SpacingProperty);
|
||
|
|
}
|
||
|
|
set
|
||
|
|
{
|
||
|
|
SetValue(SpacingProperty, value);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public Brush MapBackground
|
||
|
|
{
|
||
|
|
get
|
||
|
|
{
|
||
|
|
return (Brush)GetValue(MapBackgroundProperty);
|
||
|
|
}
|
||
|
|
set
|
||
|
|
{
|
||
|
|
SetValue(MapBackgroundProperty, value);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public Brush CaptionForeground
|
||
|
|
{
|
||
|
|
get
|
||
|
|
{
|
||
|
|
return (Brush)GetValue(CaptionForegroundProperty);
|
||
|
|
}
|
||
|
|
set
|
||
|
|
{
|
||
|
|
SetValue(CaptionForegroundProperty, value);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public Thickness MapMargin
|
||
|
|
{
|
||
|
|
get
|
||
|
|
{
|
||
|
|
return (Thickness)GetValue(MapMarginProperty);
|
||
|
|
}
|
||
|
|
set
|
||
|
|
{
|
||
|
|
SetValue(MapMarginProperty, value);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public Thickness CaptionMargin
|
||
|
|
{
|
||
|
|
get
|
||
|
|
{
|
||
|
|
return (Thickness)GetValue(CaptionMarginProperty);
|
||
|
|
}
|
||
|
|
set
|
||
|
|
{
|
||
|
|
SetValue(CaptionMarginProperty, value);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public ICommand DieClickedCommand
|
||
|
|
{
|
||
|
|
get
|
||
|
|
{
|
||
|
|
return (ICommand)GetValue(DieClickedCommandProperty);
|
||
|
|
}
|
||
|
|
set
|
||
|
|
{
|
||
|
|
SetValue(DieClickedCommandProperty, value);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public DieMapPanelControl()
|
||
|
|
{
|
||
|
|
InitializeComponent();
|
||
|
|
}
|
||
|
|
|
||
|
|
private void OpenPreviewWindow(object sender, RoutedEventArgs e)
|
||
|
|
{
|
||
|
|
if (_previewWindow == null)
|
||
|
|
{
|
||
|
|
_previewWindow = CreatePreviewWindow();
|
||
|
|
_previewWindow.Closed += OnPreviewWindowClosed;
|
||
|
|
_previewWindow.Show();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (_previewWindow.WindowState == WindowState.Minimized)
|
||
|
|
{
|
||
|
|
_previewWindow.WindowState = WindowState.Normal;
|
||
|
|
}
|
||
|
|
|
||
|
|
_previewWindow.Activate();
|
||
|
|
}
|
||
|
|
|
||
|
|
private DieMapPreviewWindow CreatePreviewWindow()
|
||
|
|
{
|
||
|
|
DieMapPreviewWindow previewWindow = new DieMapPreviewWindow();
|
||
|
|
Window owner = Window.GetWindow(this);
|
||
|
|
if (owner != null && !ReferenceEquals(owner, previewWindow))
|
||
|
|
{
|
||
|
|
previewWindow.Owner = owner;
|
||
|
|
}
|
||
|
|
|
||
|
|
BindingOperations.SetBinding(previewWindow, DieMapPreviewWindow.CaptionProperty, CreateBinding(nameof(Caption)));
|
||
|
|
BindingOperations.SetBinding(previewWindow, DieMapPreviewWindow.MapModelProperty, CreateBinding(nameof(MapModel)));
|
||
|
|
BindingOperations.SetBinding(previewWindow, DieMapPreviewWindow.MapBackgroundProperty, CreateBinding(nameof(MapBackground)));
|
||
|
|
BindingOperations.SetBinding(previewWindow, DieMapPreviewWindow.DieSizeProperty, CreateBinding(nameof(DieSize)));
|
||
|
|
BindingOperations.SetBinding(previewWindow, DieMapPreviewWindow.SpacingProperty, CreateBinding(nameof(Spacing)));
|
||
|
|
BindingOperations.SetBinding(previewWindow, DieMapPreviewWindow.DieClickedCommandProperty, CreateBinding(nameof(DieClickedCommand)));
|
||
|
|
return previewWindow;
|
||
|
|
}
|
||
|
|
|
||
|
|
private Binding CreateBinding(string propertyName)
|
||
|
|
{
|
||
|
|
return new Binding(propertyName)
|
||
|
|
{
|
||
|
|
Source = this,
|
||
|
|
Mode = BindingMode.OneWay
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
private void OnPreviewWindowClosed(object sender, EventArgs e)
|
||
|
|
{
|
||
|
|
if (_previewWindow == null)
|
||
|
|
{
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
_previewWindow.Closed -= OnPreviewWindowClosed;
|
||
|
|
_previewWindow = null;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|