using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace Future.Contract { [TemplatePart(Name = "CloseHandle", Type = typeof(Button))] //关闭按钮 //[TemplatePart(Name = "OpacityArea", Type = typeof(UIElement))] //透视区域 public class DrawerTemplate : ContentControl { private Button? _CloseHandle; //private UIElement? _OpacityArea; static DrawerTemplate() { DefaultStyleKeyProperty.OverrideMetadata(typeof(DrawerTemplate), new FrameworkPropertyMetadata(typeof(DrawerTemplate))); } /// /// 请求关闭事件 /// public event Action? ApplyCloseDrawer; public override void OnApplyTemplate() { base.OnApplyTemplate(); this._CloseHandle = this.Template.FindName("CloseHandle", this) as Button; //this._OpacityArea = this.Template.FindName("OpacityArea", this) as UIElement; if (this._CloseHandle != null) this._CloseHandle.Click += (s, e) => this.ApplyCloseDrawer?.Invoke(); } public DrawerTemplate Clone() { return new DrawerTemplate() { Background = this.Background, Foreground = this.Foreground, BorderBrush = this.BorderBrush, BorderThickness = this.BorderThickness, HorizontalAlignment = this.HorizontalAlignment, VerticalAlignment = this.VerticalAlignment, HorizontalContentAlignment = this.HorizontalContentAlignment, VerticalContentAlignment = this.VerticalContentAlignment, Dock = this.Dock, FontFamily = this.FontFamily, FontSize = this.FontSize, FontStretch=this.FontStretch, FontStyle = this.FontStyle, FontWeight = this.FontWeight, //Template = this.Template, Style = this.Style }; } #region 依赖属性 /// /// 抽屉标题 /// public string Title { get { return (string)GetValue(TitleProperty); } set { SetValue(TitleProperty, value); } } // Using a DependencyProperty as the backing store for Title. This enables animation, styling, binding, etc... public static readonly DependencyProperty TitleProperty = DependencyProperty.Register("Title", typeof(string), typeof(DrawerTemplate), new PropertyMetadata("")); /// /// 停靠方向 /// public Dock Dock { get { return (Dock)GetValue(DockProperty); } set { SetValue(DockProperty, value); } } // Using a DependencyProperty as the backing store for Dock. This enables animation, styling, binding, etc... public static readonly DependencyProperty DockProperty = DependencyProperty.Register("Dock", typeof(Dock), typeof(DrawerTemplate), new PropertyMetadata(Dock.Right)); public Visibility HandleVisibility { get { return (Visibility)GetValue(HandleVisibilityProperty); } set { SetValue(HandleVisibilityProperty, value); } } // Using a DependencyProperty as the backing store for HandleVisibility. This enables animation, styling, binding, etc... public static readonly DependencyProperty HandleVisibilityProperty = DependencyProperty.Register("HandleVisibility", typeof(Visibility), typeof(DrawerTemplate), new PropertyMetadata(Visibility.Visible)); public double TitleHeight { get { return (double)GetValue(TitleHeightProperty); } set { SetValue(TitleHeightProperty, value); } } // Using a DependencyProperty as the backing store for TitleHeight. This enables animation, styling, binding, etc... public static readonly DependencyProperty TitleHeightProperty = DependencyProperty.Register("TitleHeight", typeof(double), typeof(DrawerTemplate), new PropertyMetadata(60.0)); #endregion } }