Files
Shi.Ji e31d3560bb 添加 MX-PD-盘古 项目文件
将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
2026-05-18 11:43:09 +08:00

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;
}
}
}