namespace NeoUI.Controls; /// /// NeoWindow 类继承自 WPF 的 Window 类,用于创建具有特定样式和功能的窗口。 /// 该类通过设置默认样式资源引用来自定义窗口外观,并提供属性来控制窗口的行为和内容布局。 /// public class NeoWindow : Window { private const string VbMinimizeButtonName = "minimizeButton"; private const string VbMaximizeRestoreButtonName = "maximizeRestoreButton"; /// /// 用于在XAML模板中标识关闭按钮的名称。 /// 此常量字符串值为 "closeButton",用于在窗口样式应用时通过GetTemplateChild方法查找对应的关闭按钮控件。 /// private const string VbCloseButtonName = "closeButton"; /// /// /// public NeoWindow() { SetResourceReference(StyleProperty, typeof(NeoWindow)); //设置默认的样式资源引用 } static NeoWindow() { DefaultStyleKeyProperty.OverrideMetadata(typeof(NeoWindow), new FrameworkPropertyMetadata(typeof(NeoWindow))); } /// /// 如果窗口不活动,请让窗口的内容淡出。 /// 默认值为真(已启用)。 /// public static readonly DependencyProperty FadeContentIfInactiveProperty = DependencyProperty.Register( nameof(FadeContentIfInactive), typeof(bool), typeof(NeoWindow), new FrameworkPropertyMetadata(true)); /// /// 如果窗口不活动,请让窗口的内容淡出。 /// 默认值为真(已启用)。 /// public bool FadeContentIfInactive { get => (bool)GetValue(FadeContentIfInactiveProperty); set => SetValue(FadeContentIfInactiveProperty, value); } /// /// 标题栏左侧内容模板 /// public object TitleBarLeftContent { get => (object)GetValue(TitleBarLeftContentProperty); set => SetValue(TitleBarLeftContentProperty, value); } /// /// 用于定义窗口左侧内容区域的数据模板。 /// 此依赖属性允许开发者自定义左侧内容的布局和显示方式,通过设置不同的DataTemplate来改变该区域的内容呈现形式。 /// public static readonly DependencyProperty TitleBarLeftContentProperty = DependencyProperty.Register(nameof(TitleBarLeftContent), typeof(object), typeof(NeoWindow)); /// /// 标题栏右侧内容模板 /// public object TitleBarRightContent { get => (object)GetValue(TitleBarRightContentProperty); set => SetValue(TitleBarRightContentProperty, value); } /// /// 用于定义窗口右侧内容区域的数据模板。 /// 此依赖属性允许开发者自定义右侧内容的布局和显示方式,通过设置不同的DataTemplate来改变该区域的内容呈现形式。 /// public static readonly DependencyProperty TitleBarRightContentProperty = DependencyProperty.Register(nameof(TitleBarRightContent), typeof(object), typeof(NeoWindow)); private Button? minimizeButton; private Button? maximizeRestoreButton; private Button? closeButton; /// public override void OnApplyTemplate() { if (minimizeButton != null) { minimizeButton.Click -= MinimizeButtonClickHandler; } minimizeButton = GetTemplateChild(VbMinimizeButtonName) as Button; if (minimizeButton != null) { minimizeButton.Click += MinimizeButtonClickHandler; } if (maximizeRestoreButton != null) { maximizeRestoreButton.Click -= MaximizeRestoreButtonClickHandler; } maximizeRestoreButton = GetTemplateChild(VbMaximizeRestoreButtonName) as Button; if (maximizeRestoreButton != null) { maximizeRestoreButton.Click += MaximizeRestoreButtonClickHandler; } if (closeButton != null) { closeButton.Click -= CloseButtonClickHandler; } closeButton = GetTemplateChild(VbCloseButtonName) as Button; if (closeButton != null) { closeButton.Click += CloseButtonClickHandler; } base.OnApplyTemplate(); } private void CloseButtonClickHandler(object sender, RoutedEventArgs args) { Close(); } private void MaximizeRestoreButtonClickHandler(object sender, RoutedEventArgs args) { WindowState = (WindowState == WindowState.Normal) ? WindowState.Maximized : WindowState.Normal; } private void MinimizeButtonClickHandler(object sender, RoutedEventArgs args) { WindowState = WindowState.Minimized; } }