淘宝网站c 设计怎么做的,新建网站的缺点,购物网站设计流程图,html5绿色的房地产手机网站模板源码WindowChrome 自定义窗口完美实现简介效果图自定义最小化、最大化、关闭按钮布局实现结语简介
Microsoft官网关于 WindowChome 的介绍 截取Microsoft文章的一段话#xff1a; 若要在保留其标准功能时自定义窗口#xff0c;可以使用该 WindowChrome 类。 该 WindowChrome…
WindowChrome 自定义窗口完美实现简介效果图自定义最小化、最大化、关闭按钮布局实现结语简介
Microsoft官网关于 WindowChome 的介绍 截取Microsoft文章的一段话 若要在保留其标准功能时自定义窗口可以使用该 WindowChrome 类。 该 WindowChrome 类将窗口框架的功能与视觉对象分开并允许你控制应用程序窗口的客户端和非客户端区域之间的边界。 通过 WindowChrome 该类可以通过扩展工作区来覆盖非工作区将 WPF 内容置于窗口框架中。 同时它通过两个不可见区域保留系统行为 调整边框 和 标题 区域的大小。 效果图 自定义最小化、最大化、关闭按钮
最小化按钮
Stylex:KeySystemCloseButtonStyleBasedOn{StaticResource SystemButtonStyleBase}TargetType{x:Type Button}Setter PropertyTemplateSetter.ValueControlTemplate TargetType{x:Type Button}Grid Background{TemplateBinding Background}Viewbox Width12 Height12Path DataM550.848 502.496l308.64-308.896a31.968 31.968 0 1 0-45.248-45.248l-308.608 308.896-308.64-308.928a31.968 31.968 0 1 0-45.248 45.248l308.64 308.896-308.64 308.896a31.968 31.968 0 1 0 45.248 45.248l308.64-308.896 308.608 308.896a31.968 31.968 0 1 0 45.248-45.248l-308.64-308.864z Fill{TemplateBinding BorderBrush} //ViewboxContentPresenterHorizontalAlignmentCenterVerticalAlignmentCenterContent{TemplateBinding Content} //GridControlTemplate.TriggersTrigger PropertyIsMouseOver ValueTrueSetter PropertyBackground Value{StaticResource CloseColor} /Setter PropertyBorderBrush Value{StaticResource DominantColor} //TriggerTrigger PropertyIsFocused ValueTrueSetter PropertyFocusVisualStyle Value{x:Null} //Trigger/ControlTemplate.Triggers/ControlTemplate/Setter.Value/Setter
/Style最大化按钮
Stylex:KeySystemMaxButtonStyleBasedOn{StaticResource SystemButtonStyleBase}TargetType{x:Type Button}Setter PropertyTemplateSetter.ValueControlTemplate TargetType{x:Type Button}Grid Background{TemplateBinding Background}Viewbox Width12 Height12Path DataM959.72 0H294.216a63.96 63.96 0 0 0-63.96 63.96v127.92H64.28A63.96 63.96 0 0 0 0.32 255.84V959.4a63.96 63.96 0 0 0 63.96 63.96h703.56a63.96 63.96 0 0 0 63.96-63.96V792.465h127.92a63.96 63.96 0 0 0 63.96-63.96V63.96A63.96 63.96 0 0 0 959.72 0zM767.84 728.505V959.4H64.28V255.84h703.56z m189.322 0H831.8V255.84a63.96 63.96 0 0 0-63.96-63.96H294.216V63.96H959.72z Fill{TemplateBinding BorderBrush} //ViewboxContentPresenterHorizontalAlignmentCenterVerticalAlignmentCenterContent{TemplateBinding Content} //GridControlTemplate.TriggersTrigger PropertyIsMouseOver ValueTrueSetter PropertyBackground Value{StaticResource SuspensionColor} //TriggerTrigger PropertyIsFocused ValueTrueSetter PropertyFocusVisualStyle Value{x:Null} //Trigger/ControlTemplate.Triggers/ControlTemplate/Setter.Value/Setter
/Style关闭按钮
Stylex:KeySystemMinButtonStyleBasedOn{StaticResource SystemButtonStyleBase}TargetType{x:Type Button}Setter PropertyTemplateSetter.ValueControlTemplate TargetType{x:Type Button}Grid Background{TemplateBinding Background}Viewbox Width12 Height10Path DataM928.2 548h-832c-17.7 0-32-14.3-32-32s14.3-32 32-32h832c17.7 0 32 14.3 32 32s-14.3 32-32 32z Fill{TemplateBinding BorderBrush} //ViewboxContentPresenterHorizontalAlignmentCenterVerticalAlignmentCenterContent{TemplateBinding Content} //GridControlTemplate.TriggersTrigger PropertyIsMouseOver ValueTrueSetter PropertyBackground Value{StaticResource SuspensionColor} //TriggerTrigger PropertyIsFocused ValueTrueSetter PropertyFocusVisualStyle Value{x:Null} //Trigger/ControlTemplate.Triggers/ControlTemplate/Setter.Value/Setter
/Style/// summary
/// 窗口移动
/// /summary
/// param namesender/param
/// param namee/param
private void Move_Click(object sender, System.Windows.Input.MouseButtonEventArgs e) this.DragMove();/// summary
/// 最小化
/// /summary
/// param namesender/param
/// param namee/param
private void BtnMin_Click(object sender, RoutedEventArgs e) WindowState WindowState.Minimized;/// summary
/// 最大化/还原
/// /summary
/// param namesender/param
/// param namee/param
private void BtnMax_Click(object sender, RoutedEventArgs e) WindowState WindowState is WindowState.Normal ? WindowState.Maximized : WindowState.Normal;/// summary
/// 关闭
/// /summary
/// param namesender/param
/// param namee/param
private void BtnClose_Click(object sender, RoutedEventArgs e) Application.Current.Shutdown();布局实现 首先我们需要在 MainWindow 也就是我们的主窗口中的 Window.Resources 中实现 WindowChrome 的基本样式 WindowChrome.ResizeBorderThickness 设置不可见边框宽度 WindowChrome.CaptionHeight 设置属于标题栏的范围——高度 WindowChrome.UseAeroCaptionButtons 是否启用默认系统按钮功能——三大金刚键 WindowChrome.NonClientFrameEdges 设置客户区域使用 bottom 可以实现加载时空白窗口而不显示默认窗口提升用户体验 Windowx:ClassSignalRClient.MainWindowxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:localclr-namespace:SignalRClientxmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006TitleWidth880Height620MinWidth700MinHeight500Style{StaticResource mainWindow}WindowChrome.WindowChrome{DynamicResource WindowChromeKey}WindowStartupLocationCenterScreenmc:IgnorabledWindow.ResourcesWindowChrome x:KeyWindowChromeKeyWindowChrome.ResizeBorderThicknessThickness5/Thickness/WindowChrome.ResizeBorderThicknessWindowChrome.CaptionHeight60/WindowChrome.CaptionHeightWindowChrome.UseAeroCaptionButtonsfalse/WindowChrome.UseAeroCaptionButtonsWindowChrome.NonClientFrameEdgesbottom/WindowChrome.NonClientFrameEdges/WindowChrome/Window.Resources
/Window重写窗口实现最大化窗口下标题栏及客户区域偏移问题的修正。 通过代码获取当前窗口的工作区域及任务栏以外的其他区域 System.Windows.SystemParameters.WorkArea.Width 获取工作区域的宽 System.Windows.SystemParameters.WorkArea.Height 获取工作区域的高 为什么要使用 ValueConverter 主要是因为 WorkArea 返回的类型无法直接 binding xaml ValueConverters:WorkAreaWidth x:KeyworkAreaWidth /
ValueConverters:WorkAreaHeight x:KeyworkAreaHeight /Style x:KeymainWindow TargetType{x:Type Window}Setter PropertyTemplateSetter.ValueControlTemplate TargetTypeWindowContentControl x:Namewindow Content{TemplateBinding Content} /ControlTemplate.TriggersTrigger PropertyWindowState ValueMaximizedSetter TargetNamewindow PropertyMaxHeight Value{Binding Converter{StaticResource workAreaHeight}} /Setter TargetNamewindow PropertyMaxWidth Value{Binding Converter{StaticResource workAreaWidth}} //Trigger/ControlTemplate.Triggers/ControlTemplate/Setter.Value/Setter
/Styleusing System;
using System.Globalization;
using System.Windows.Data;namespace SignalRClient.ValueConverters
{internal class WorkAreaWidth : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){return System.Windows.SystemParameters.WorkArea.Width;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){throw new NotImplementedException();}}
}using System;
using System.Globalization;
using System.Windows.Data;namespace SignalRClient.ValueConverters
{internal class WorkAreaHeight : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){return System.Windows.SystemParameters.WorkArea.Height;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){throw new NotImplementedException();}}
}结语 一开始确实很难搞Microsoft 的文档里面也并没有详细介绍窗口内容溢出的问题但是只要仔细研究过 WPF 的同学都知道很多东西是可以通过 Trigger 来实现的。Get 到这一点很多问题就迎刃而解了。欢迎大家留言通过探讨