From 200487677083563c70e3daa974ca23c1e10837e9 Mon Sep 17 00:00:00 2001 From: luxiaoqi Date: Fri, 24 Nov 2023 14:26:26 +0800 Subject: [PATCH] 1 --- CPF.Toolkit.Demo/TestMdiView.cs | 20 +- CPF.Toolkit/Controls/MdiFrame.cs | 223 +++++++++++ CPF.Toolkit/Controls/MdiWindow.cs | 329 +++++++++++++--- CPF/Controls/WindowFrame.cs | 607 +++++++++++++++--------------- 4 files changed, 829 insertions(+), 350 deletions(-) create mode 100644 CPF.Toolkit/Controls/MdiFrame.cs diff --git a/CPF.Toolkit.Demo/TestMdiView.cs b/CPF.Toolkit.Demo/TestMdiView.cs index 2214932..364e549 100644 --- a/CPF.Toolkit.Demo/TestMdiView.cs +++ b/CPF.Toolkit.Demo/TestMdiView.cs @@ -23,7 +23,7 @@ namespace CPF.Toolkit.Demo this.Width = 1280; this.Height = 720; this.Background = null; - this.Children.Add(new WindowFrame(this, new Panel + var frame = this.Children.Add(new WindowFrame(this, new Panel { Size = SizeField.Fill, Background = "204,204,204", @@ -32,13 +32,23 @@ namespace CPF.Toolkit.Demo new MdiWindow { Title = "test", - Content = new Button - { - Content = "test" - }, + //Content = new WrapPanel + //{ + // Children = + // { + // new Button{ Content = "test" ,Width = 100, Height = 35 }, + // new Button{ Content = "test" ,Width = 100, Height = 35 }, + // new Button{ Content = "test" ,Width = 100, Height = 35 }, + // new Button{ Content = "test" ,Width = 100, Height = 35 }, + // }, + //}, } } })); + frame.CaptionBackgrund = "white"; + frame.CaptionForeground = "black"; + frame.ControlBoxStroke = "black"; + frame.MaximizeBox = true; } } } diff --git a/CPF.Toolkit/Controls/MdiFrame.cs b/CPF.Toolkit/Controls/MdiFrame.cs new file mode 100644 index 0000000..8d46bd0 --- /dev/null +++ b/CPF.Toolkit/Controls/MdiFrame.cs @@ -0,0 +1,223 @@ +using CPF.Controls; +using CPF.Drawing; +using System; +using System.Collections.Generic; +using System.Text; + +namespace CPF.Toolkit.Controls +{ + internal class MdiFrame : Control + { + public MdiFrame() + { + + } + + protected override void InitializeComponent() + { + this.Children.Add(new Grid + { + Size = SizeField.Fill, + RowDefinitions = + { + new RowDefinition{ Height = 35 }, + new RowDefinition{ }, + }, + Children = + { + new Thumb + { + Size = SizeField.Fill, + Background = new LinearGradientFill + { + EndPoint = "0,100%", + GradientStops = + { + new GradientStop("152,180,208",0), + new GradientStop("181,206,231",1), + } + }, + Child = new Panel + { + Size = SizeField.Fill, + Children = + { + new StackPanel + { + Orientation = Orientation.Horizontal, + MarginLeft = 0, + Children = + { + new TextBlock + { + [nameof(TextBlock.Text)] = new BindingDescribe(this,nameof(this.Title),BindingMode.OneWay), + FontSize = 14, + MarginLeft = 10, + }, + } + }, + new StackPanel + { + Orientation = Orientation.Horizontal, + MarginRight = 0, + Height = "100%", + Children = + { + new SystemButton + { + Name = "min", + Size = new SizeField(30,"100%"), + Content = new Line + { + MarginTop = 5, + MarginLeft = "auto", + StartPoint = new Point(1,13), + EndPoint = new Point(14,13), + StrokeStyle = "2", + IsAntiAlias = true, + StrokeFill = "black" + } + }, + new Panel + { + Height = "100%", + Bindings = + { + { + nameof(Visibility), + nameof(MaximizeBox), + this, + BindingMode.OneWay, + a => (bool)a ? Visibility.Visible : Visibility.Collapsed + } + }, + Children = + { + new SystemButton + { + Name = "max", + Size = new SizeField(30,"100%"), + Content = new Rectangle + { + Size = new SizeField(14,12), + MarginTop = 10, + StrokeStyle = "2", + }, + Commands = + { + { nameof(Button.Click),(s,e) => this.WindowState = WindowState.Maximized } + }, + Bindings = + { + { + nameof(Border.Visibility), + nameof(this.WindowState), + this, + BindingMode.OneWay, + a => (WindowState)a == WindowState.Maximized || (WindowState)a == WindowState.FullScreen ? Visibility.Collapsed : Visibility.Visible + } + } + }, + new SystemButton + { + Name = "nor", + Visibility = Visibility.Collapsed, + Size = new SizeField(30,"100%"), + Content = new Panel + { + Size = SizeField.Fill, + Children = + { + new Rectangle + { + MarginTop = 15, + MarginLeft =8, + Size = new SizeField(11,8), + StrokeStyle = "1.5", + }, + new Polyline + { + MarginTop =11, + MarginLeft = 12, + Points = + { + new Point(0,3), + new Point(0,0), + new Point(9,0), + new Point(9,7), + new Point(6,7) + }, + StrokeStyle = "2" + } + } + }, + Commands = + { + { nameof(Button.Click),(s,e) => this.WindowState = WindowState.Normal } + }, + Bindings = + { + { + nameof(Border.Visibility), + nameof(Window.WindowState), + this, + BindingMode.OneWay, + a => (WindowState)a == WindowState.Normal ? Visibility.Collapsed : Visibility.Visible + } + } + } + } + }, + new SystemButton + { + Name = "close", + Size = new SizeField(30,"100%"), + Content = new Panel + { + Size = SizeField.Fill, + Children = + { + new Line + { + MarginTop=10, + MarginLeft=8, + StartPoint = new Point(1, 1), + EndPoint = new Point(14, 13), + StrokeStyle = "2", + IsAntiAlias=true, + }, + new Line + { + MarginTop=10, + MarginLeft=8, + StartPoint = new Point(14, 1), + EndPoint = new Point(1, 13), + StrokeStyle = "2", + IsAntiAlias=true, + } + } + }, + } + } + }, + }, + }, + }.Assign(out var thumb), + new Panel + { + Attacheds = { { Grid.RowIndex,1 } }, + BorderFill = "186,210,234", + BorderType = BorderType.BorderThickness, + BorderThickness = new Thickness(5,0,5,5), + Size = SizeField.Fill, + Children = + { + + }, + }, + } + }); + + } + } +} diff --git a/CPF.Toolkit/Controls/MdiWindow.cs b/CPF.Toolkit/Controls/MdiWindow.cs index 04b3bfe..f3930a1 100644 --- a/CPF.Toolkit/Controls/MdiWindow.cs +++ b/CPF.Toolkit/Controls/MdiWindow.cs @@ -3,52 +3,255 @@ using CPF.Animation; using CPF.Charts; using CPF.Controls; using CPF.Drawing; +using CPF.Input; using CPF.Platform; using CPF.Shapes; using CPF.Styling; using CPF.Svg; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Security.Cryptography; using System.Text; namespace CPF.Toolkit.Controls { - public class MdiWindow : Control, IWindow + public class MdiWindow : Control { public WindowState WindowState { get => GetValue(); set => SetValue(value); } public Image Icon { get => GetValue(); set => SetValue(value); } public string Title { get => GetValue(); set => SetValue(value); } public UIElement Content { get => GetValue(); set => SetValue(value); } - //protected override UIElementCollection Children => throw new NotImplementedException(); - WindowFrame frame; + [PropertyMetadata(true)] + public bool MaximizeBox { get { return GetValue(); } set { SetValue(value); } } + [PropertyMetadata(true)] + public bool MinimizeBox { get { return GetValue(); } set { SetValue(value); } } + SizeField normalSize = new SizeField(500, 500); - public void Close() - { - - } - - public void DragMove() - { - } - + Point normalPos = new Point(0, 0); protected override void InitializeComponent() { - this.Size = this.normalSize; - this.frame = base.Children.Add(new WindowFrame(this, this.Content)); - frame.MaximizeBox = true; + this.Size = normalSize; + this.Background = "white"; + this.BorderFill = "179,179,179"; + this.BorderStroke = "1"; + this.MarginLeft = 0; + this.MarginTop = 0; + base.Children.Add(new Grid + { + Size = SizeField.Fill, + RowDefinitions = + { + new RowDefinition{ Height = 35 }, + new RowDefinition{ }, + }, + Children = + { + new Thumb + { + Size = SizeField.Fill, + Background = new LinearGradientFill + { + EndPoint = "0,100%", + GradientStops = + { + new GradientStop("152,180,208",0), + new GradientStop("181,206,231",1), + } + }, + Child = new Panel + { + Size = SizeField.Fill, + Children = + { + new StackPanel + { + Orientation = Orientation.Horizontal, + MarginLeft = 0, + Children = + { + new TextBlock + { + [nameof(TextBlock.Text)] = new BindingDescribe(this,nameof(this.Title),BindingMode.OneWay), + FontSize = 14, + MarginLeft = 10, + }, + } + }, + new StackPanel + { + Orientation = Orientation.Horizontal, + MarginRight = 0, + Height = "100%", + Children = + { + new SystemButton + { + Name = "min", + Size = new SizeField(30,"100%"), + Content = new Line + { + MarginTop = 5, + MarginLeft = "auto", + StartPoint = new Point(1,13), + EndPoint = new Point(14,13), + StrokeStyle = "2", + IsAntiAlias = true, + StrokeFill = "black" + } + }, + new Panel + { + Height = "100%", + Bindings = + { + { + nameof(Visibility), + nameof(MaximizeBox), + this, + BindingMode.OneWay, + a => (bool)a ? Visibility.Visible : Visibility.Collapsed + } + }, + Children = + { + new SystemButton + { + Name = "max", + Size = new SizeField(30,"100%"), + Content = new Rectangle + { + Size = new SizeField(14,12), + MarginTop = 10, + StrokeStyle = "2", + }, + Commands = + { + { nameof(Button.Click),(s,e) => this.WindowState = WindowState.Maximized } + }, + Bindings = + { + { + nameof(Border.Visibility), + nameof(this.WindowState), + this, + BindingMode.OneWay, + a => (WindowState)a == WindowState.Maximized || (WindowState)a == WindowState.FullScreen ? Visibility.Collapsed : Visibility.Visible + } + } + }, + new SystemButton + { + Name = "nor", + Visibility = Visibility.Collapsed, + Size = new SizeField(30,"100%"), + Content = new Panel + { + Size = SizeField.Fill, + Children = + { + new Rectangle + { + MarginTop = 15, + MarginLeft =8, + Size = new SizeField(11,8), + StrokeStyle = "1.5", + }, + new Polyline + { + MarginTop =11, + MarginLeft = 12, + Points = + { + new Point(0,3), + new Point(0,0), + new Point(9,0), + new Point(9,7), + new Point(6,7) + }, + StrokeStyle = "2" + } + } + }, + Commands = + { + { nameof(Button.Click),(s,e) => this.WindowState = WindowState.Normal } + }, + Bindings = + { + { + nameof(Border.Visibility), + nameof(Window.WindowState), + this, + BindingMode.OneWay, + a => (WindowState)a == WindowState.Normal ? Visibility.Collapsed : Visibility.Visible + } + } + } + } + }, + new SystemButton + { + Name = "close", + Size = new SizeField(30,"100%"), + Content = new Panel + { + Size = SizeField.Fill, + Children = + { + new Line + { + MarginTop=10, + MarginLeft=8, + StartPoint = new Point(1, 1), + EndPoint = new Point(14, 13), + StrokeStyle = "2", + IsAntiAlias=true, + }, + new Line + { + MarginTop=10, + MarginLeft=8, + StartPoint = new Point(14, 1), + EndPoint = new Point(1, 13), + StrokeStyle = "2", + IsAntiAlias=true, + } + } + }, + } + } + }, + }, + }, + }.Assign(out var thumb), + new Panel + { + Attacheds = { { Grid.RowIndex,1 } }, + BorderFill = "186,210,234", + BorderType = BorderType.BorderThickness, + BorderThickness = new Thickness(5,0,5,5), + Size = SizeField.Fill, + Children = + { - var caption = frame.Find().FirstOrDefault(x => x.Name == "caption"); - caption.Background = "white"; - caption.BorderType = BorderType.BorderThickness; - caption.BorderThickness = new Thickness(0, 0, 0, 1); - caption.BorderFill = "235,235,235"; + }, + }, + } + }); + thumb.DragDelta += Thumb_DragDelta; + } - var title = frame.Find().FirstOrDefault(x => x.Name == "title"); - title.Foreground = "black"; - - frame.ControlBoxStroke = "black"; + private void Thumb_DragDelta(object sender, DragDeltaEventArgs e) + { + if (this.WindowState == WindowState.Maximized) + { + return; + } + this.MarginLeft += e.HorizontalChange; + this.MarginTop += e.VerticalChange; + this.normalPos = new Point(this.MarginLeft.Value, this.MarginTop.Value); } protected override void OnPropertyChanged(string propertyName, object oldValue, object newValue, PropertyMetadataAttribute propertyMetadata) @@ -56,36 +259,66 @@ namespace CPF.Toolkit.Controls switch (propertyName) { case nameof(WindowState): - switch (this.WindowState) { - case WindowState.Normal: - { - this.Size = this.normalSize; - } - break; - case WindowState.Minimized: - break; - case WindowState.Maximized: - { - this.Size = SizeField.Fill; - } - break; - case WindowState.FullScreen: - break; - } - break; - - case nameof(Width): - case nameof(Height): - case nameof(Size): - { - if (WindowState == WindowState.Normal) + switch (this.WindowState) { - this.Size = this.normalSize; + case WindowState.Normal: + this.Size = this.normalSize; + this.MarginLeft = this.normalPos.X; + this.MarginTop = this.normalPos.Y; + break; + case WindowState.Minimized: + break; + case WindowState.Maximized: + this.Size = SizeField.Fill; + this.MarginLeft = 0; + this.MarginTop = 0; + break; + case WindowState.FullScreen: + break; } } break; + + case nameof(Size): + case nameof(Width): + case nameof(Height): + if (this.WindowState == WindowState.Normal) + { + this.normalSize = this.Size; + } + break; + + case nameof(MarginLeft): + { + if (this.MarginLeft.Value <= 0) + { + this.MarginLeft = 0; + } + else + { + var value = this.MarginLeft.Value + this.Width.Value; + Debug.WriteLine(value); + } + } + break; + case nameof(MarginTop): + if (MarginTop.Value <= 0) + { + this.MarginTop = 0; + } + break; + //case nameof(MarginRight): + // if (MarginRight.Value <= 0) + // { + // this.MarginRight = 0; + // } + // break; + //case nameof(MarginBottom): + + // break; } + base.OnPropertyChanged(propertyName, oldValue, newValue, propertyMetadata); } } diff --git a/CPF/Controls/WindowFrame.cs b/CPF/Controls/WindowFrame.cs index 463f3eb..ab066ba 100644 --- a/CPF/Controls/WindowFrame.cs +++ b/CPF/Controls/WindowFrame.cs @@ -98,6 +98,16 @@ namespace CPF.Controls [PropertyMetadata(typeof(ViewFill), "white")] public ViewFill ControlBoxStroke { get => GetValue(); set => SetValue(value); } + [PropertyMetadata(typeof(ViewFill), "#1E9FFF")] + public ViewFill CaptionBackgrund { get => GetValue(); set => SetValue(value); } + + [PropertyMetadata(typeof(ViewFill), "white")] + public ViewFill CaptionForeground { get => GetValue(); set => SetValue(value); } + + [PropertyMetadata(typeof(FloatField), "35")] + public FloatField CaptionHeight { get => GetValue(); set => SetValue(value); } + + protected override void InitializeComponent() { //ViewFill color = "#fff"; @@ -163,351 +173,354 @@ namespace CPF.Controls }); //标题栏和按钮 grid.Children.Add( - new Panel - { - Name = "caption", - Background = "#1E9FFF", - Width = "100%", - Height = "30", - Commands = + new Panel { + Name = "caption", + Width = "100%", + Bindings = { - nameof(MouseDown), - nameof(IWindow.DragMove), - Window + { nameof(Panel.Background),nameof(this.CaptionBackgrund),this}, + { nameof(Panel.Height),nameof(this.CaptionHeight),this}, }, + Commands = { - nameof(DoubleClick), - (s,e)=> DoubleClickTitle() - } - }, - Children = - { - new StackPanel - { - Name="titleBox", - MarginLeft=0, - Orientation= Orientation.Horizontal, - Children= { - new Picture - { - Name="icon", - MarginLeft=5, - Width=20, - Height=20, - Stretch= Stretch.Fill, - Bindings= - { - { - nameof(Picture.Source), - nameof(window.Icon), - window - }, - { - nameof(Visibility), - nameof(window.Icon), - window, - BindingMode.OneWay, - a=>a==null||!ShowIcon?Visibility.Collapsed:Visibility.Visible - }, - { - nameof(Visibility), - nameof(ShowIcon), - this, - BindingMode.OneWay, - (bool showIcon)=>!showIcon||window.Icon==null?Visibility.Collapsed:Visibility.Visible - } - } - }, - new TextBlock - { - Name="title", - MarginLeft=8, - MarginTop=2, - Bindings= - { - { - nameof(TextBlock.Text), - nameof(IWindow.Title), - Window - } - }, - Foreground="#fff" - }, + nameof(MouseDown), + nameof(IWindow.DragMove), + Window + }, + { + nameof(DoubleClick), + (s,e)=> DoubleClickTitle() } }, - new StackPanel + Children = { - Name="controlBox", - MarginRight=0, - Height = "100%", - Orientation= Orientation.Horizontal, - Children = + new StackPanel { - systemButtons, - new SystemButton + Name="titleBox", + MarginLeft=0, + Orientation= Orientation.Horizontal, + Children= { - ToolTip="最小化", - Name="min", - Width = 30, - Height = "100%", - Content= - new Line + new Picture { - MarginLeft="auto", - MarginTop=5, - StartPoint = new Point(1, 13), - EndPoint = new Point(14, 13), - StrokeStyle = "2", - IsAntiAlias=true, - //StrokeFill=color - Bindings = + Name="icon", + MarginLeft=5, + Width=20, + Height=20, + Stretch= Stretch.Fill, + Bindings= { - { nameof(Line.StrokeFill),nameof(this.ControlBoxStroke),this} - } - }, - Bindings= - { - { - nameof(Visibility), - nameof(MinimizeBox), - this, - BindingMode.OneWay, - a=>(bool)a?Visibility.Visible: Visibility.Collapsed - } - }, - Commands = - { - { - nameof(Button.Click), - (s,e)=> { - //(e as MouseButtonEventArgs).Handled = true; - Window.WindowState = WindowState.Minimized; + nameof(Picture.Source), + nameof(window.Icon), + window + }, + { + nameof(Visibility), + nameof(window.Icon), + window, + BindingMode.OneWay, + a=>a==null||!ShowIcon?Visibility.Collapsed:Visibility.Visible + }, + { + nameof(Visibility), + nameof(ShowIcon), + this, + BindingMode.OneWay, + (bool showIcon)=>!showIcon||window.Icon==null?Visibility.Collapsed:Visibility.Visible } } }, - Triggers= + new TextBlock { - new Trigger(nameof(Panel.IsMouseOver), Relation.Me) + Name="title", + MarginLeft=8, + MarginTop=2, + Bindings= { - Setters = { - { - nameof(Panel.Background), - hoverColor - } - } - } + nameof(TextBlock.Text), + nameof(IWindow.Title), + Window + }, + { nameof(TextBlock.Foreground),nameof(this.CaptionForeground),this } + }, }, } - , - new Panel + }, + new StackPanel + { + Name="controlBox", + MarginRight=0, + Height = "100%", + Orientation= Orientation.Horizontal, + Children = { - Height = "100%", - Bindings= + systemButtons, + new SystemButton { + ToolTip="最小化", + Name="min", + Width = 30, + Height = "100%", + Content= + new Line { - nameof(Visibility), - nameof(MaximizeBox), - this, - BindingMode.OneWay, - a=>(bool)a?Visibility.Visible: Visibility.Collapsed - } - }, - Children= - { - new SystemButton - { - ToolTip="最大化", - Name="max", - Width = 30, - Height = "100%", - Content= new Rectangle + MarginLeft="auto", + MarginTop=5, + StartPoint = new Point(1, 13), + EndPoint = new Point(14, 13), + StrokeStyle = "2", + IsAntiAlias=true, + //StrokeFill=color + Bindings = { - Width=14, - Height=12, - MarginTop=10, - StrokeStyle="2", + { nameof(Line.StrokeFill),nameof(this.ControlBoxStroke),this} + } + }, + Bindings= + { + { + nameof(Visibility), + nameof(MinimizeBox), + this, + BindingMode.OneWay, + a=>(bool)a?Visibility.Visible: Visibility.Collapsed + } + }, + Commands = + { + { + nameof(Button.Click), + (s,e)=> + { + //(e as MouseButtonEventArgs).Handled = true; + Window.WindowState = WindowState.Minimized; + } + } + }, + Triggers= + { + new Trigger(nameof(Panel.IsMouseOver), Relation.Me) + { + Setters = + { + { + nameof(Panel.Background), + hoverColor + } + } + } + }, + } + , + new Panel + { + Height = "100%", + Bindings= + { + { + nameof(Visibility), + nameof(MaximizeBox), + this, + BindingMode.OneWay, + a=>(bool)a?Visibility.Visible: Visibility.Collapsed + } + }, + Children= + { + new SystemButton + { + ToolTip="最大化", + Name="max", + Width = 30, + Height = "100%", + Content= new Rectangle + { + Width=14, + Height=12, + MarginTop=10, + StrokeStyle="2", + Bindings = + { + { nameof(Line.StrokeFill),nameof(this.ControlBoxStroke),this} + } + }, + Commands = + { + { + nameof(Button.Click), + (s,e)=> + { + //(e as MouseButtonEventArgs).Handled = true; + Window.WindowState= WindowState.Maximized; + } + } + }, Bindings = { - { nameof(Line.StrokeFill),nameof(this.ControlBoxStroke),this} - } - }, - Commands = - { - { - nameof(Button.Click), - (s,e)=> { - //(e as MouseButtonEventArgs).Handled = true; - Window.WindowState= WindowState.Maximized; + nameof(Border.Visibility), + nameof(Window.WindowState), + Window, + BindingMode.OneWay, + a => (WindowState)a == WindowState.Maximized||(WindowState)a == WindowState.FullScreen ? Visibility.Collapsed : Visibility.Visible } - } - }, - Bindings = - { + }, + Triggers= { - nameof(Border.Visibility), - nameof(Window.WindowState), - Window, - BindingMode.OneWay, - a => (WindowState)a == WindowState.Maximized||(WindowState)a == WindowState.FullScreen ? Visibility.Collapsed : Visibility.Visible - } - }, - Triggers= - { - new Trigger(nameof(Panel.IsMouseOver), Relation.Me) - { - Setters = + new Trigger(nameof(Panel.IsMouseOver), Relation.Me) { + Setters = { - nameof(Panel.Background), - hoverColor + { + nameof(Panel.Background), + hoverColor + } } } - } + }, }, - }, - new SystemButton - { - ToolTip="向下还原", - Name="nor", - Width = 30, - Height = "100%", - Content=new Panel{ - Size=SizeField.Fill, - Children= - { - new Rectangle + new SystemButton + { + ToolTip="向下还原", + Name="nor", + Width = 30, + Height = "100%", + Content=new Panel{ + Size=SizeField.Fill, + Children= { - MarginTop=15, - MarginLeft=8, - Width=11, - Height=8, - StrokeStyle="1.5", - //StrokeFill = color - Bindings = { { nameof(Line.StrokeFill), nameof(this.ControlBoxStroke), this } }, - }, - new Polyline - { - MarginTop=11, - MarginLeft=12, - Points= + new Rectangle { - new Point(0,3), - new Point(0,0), - new Point(9,0), - new Point(9,7), - new Point(6,7) + MarginTop=15, + MarginLeft=8, + Width=11, + Height=8, + StrokeStyle="1.5", + //StrokeFill = color + Bindings = { { nameof(Line.StrokeFill), nameof(this.ControlBoxStroke), this } }, }, - //StrokeFill = color, - Bindings = { { nameof(Line.StrokeFill), nameof(this.ControlBoxStroke), this } }, - StrokeStyle="2" - } - } - }, - Commands = - { - { - nameof(Button.Click), - (s,e)=> - { - //(e as MouseButtonEventArgs).Handled = true; - Window.WindowState = WindowState.Normal; - } - } - }, - Bindings = - { - { - nameof(Border.Visibility), - nameof(Window.WindowState), - Window, - BindingMode.OneWay, - a => (WindowState)a == WindowState.Normal ? Visibility.Collapsed : Visibility.Visible - } - }, - Triggers= - { - new Trigger(nameof(Panel.IsMouseOver), Relation.Me) - { - Setters = - { + new Polyline { - nameof(Panel.Background), - hoverColor + MarginTop=11, + MarginLeft=12, + Points= + { + new Point(0,3), + new Point(0,0), + new Point(9,0), + new Point(9,7), + new Point(6,7) + }, + //StrokeFill = color, + Bindings = { { nameof(Line.StrokeFill), nameof(this.ControlBoxStroke), this } }, + StrokeStyle="2" } } - } - }, - } - } - }, - new SystemButton - { - Name="close", - ToolTip="关闭", - Width = 30, - Height = "100%", - Content=new Panel{ - Size=SizeField.Fill, - Children = - { - new Line - { - MarginTop=8, - MarginLeft=8, - StartPoint = new Point(1, 1), - EndPoint = new Point(14, 13), - StrokeStyle = "2", - IsAntiAlias=true, - //StrokeFill=color - Bindings = { { nameof(Line.StrokeFill), nameof(this.ControlBoxStroke), this } } - }, - new Line - { - MarginTop=8, - MarginLeft=8, - StartPoint = new Point(14, 1), - EndPoint = new Point(1, 13), - StrokeStyle = "2", - IsAntiAlias=true, - //StrokeFill=color - Bindings = { { nameof(Line.StrokeFill), nameof(this.ControlBoxStroke), this } } - } - } - }, - Commands = - { - { - nameof(Button.Click), - (s,e)=> - { - //(e as MouseButtonEventArgs).Handled=true; - Window.Close(); - } - } - }, - Triggers= - { - new Trigger(nameof(Panel.IsMouseOver), Relation.Me) - { - Setters = - { + }, + Commands = { - nameof(Panel.Background), - hoverColor - } + { + nameof(Button.Click), + (s,e)=> + { + //(e as MouseButtonEventArgs).Handled = true; + Window.WindowState = WindowState.Normal; + } + } + }, + Bindings = + { + { + nameof(Border.Visibility), + nameof(Window.WindowState), + Window, + BindingMode.OneWay, + a => (WindowState)a == WindowState.Normal ? Visibility.Collapsed : Visibility.Visible + } + }, + Triggers= + { + new Trigger(nameof(Panel.IsMouseOver), Relation.Me) + { + Setters = + { + { + nameof(Panel.Background), + hoverColor + } + } + } + }, } } }, + new SystemButton + { + Name="close", + ToolTip="关闭", + Width = 30, + Height = "100%", + Content=new Panel{ + Size=SizeField.Fill, + Children = + { + new Line + { + MarginTop=8, + MarginLeft=8, + StartPoint = new Point(1, 1), + EndPoint = new Point(14, 13), + StrokeStyle = "2", + IsAntiAlias=true, + //StrokeFill=color + Bindings = { { nameof(Line.StrokeFill), nameof(this.ControlBoxStroke), this } } + }, + new Line + { + MarginTop=8, + MarginLeft=8, + StartPoint = new Point(14, 1), + EndPoint = new Point(1, 13), + StrokeStyle = "2", + IsAntiAlias=true, + //StrokeFill=color + Bindings = { { nameof(Line.StrokeFill), nameof(this.ControlBoxStroke), this } } + } + } + }, + Commands = + { + { + nameof(Button.Click), + (s,e)=> + { + //(e as MouseButtonEventArgs).Handled=true; + Window.Close(); + } + } + }, + Triggers= + { + new Trigger(nameof(Panel.IsMouseOver), Relation.Me) + { + Setters = + { + { + nameof(Panel.Background), + hoverColor + } + } + } + }, + } } } } - } - }); + }); if (Content != null) { grid.Children.Add(Content, 0, 1);