using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace AIStudio.Wpf.Block.Controls { public class BlockPanel : Panel { #region 依赖属性 public static readonly DependencyProperty BackgroundProperty = DependencyProperty.Register(nameof(Background), typeof(Brush), typeof(BlockPanel) , new PropertyMetadata(new SolidColorBrush(Color.FromRgb(255, 255, 255)))); /// /// 背景色,默认值为#FFFFFF,白色 /// public Brush Background { get { return (Brush)GetValue(BackgroundProperty); } set { SetValue(BackgroundProperty, value); } } public static readonly DependencyProperty PaddingProperty = DependencyProperty.Register(nameof(Padding), typeof(Thickness), typeof(BlockPanel) , new PropertyMetadata(new Thickness(0, 0, 0, 0))); /// /// 内边距 /// public Thickness Padding { get { return (Thickness)GetValue(PaddingProperty); } set { SetValue(PaddingProperty, value); } } public static readonly DependencyProperty BorderBrushProperty = DependencyProperty.Register(nameof(BorderBrush), typeof(Brush), typeof(BlockPanel) , new PropertyMetadata(default(Brush))); /// /// 边框颜色 /// public Brush BorderBrush { get { return (Brush)GetValue(BorderBrushProperty); } set { SetValue(BorderBrushProperty, value); } } public static readonly DependencyProperty BorderThicknessProperty = DependencyProperty.Register(nameof(BorderThickness), typeof(Thickness), typeof(BlockPanel), new PropertyMetadata(new Thickness(0d))); /// /// 边框大小 /// public Thickness BorderThickness { get { return (Thickness)GetValue(BorderThicknessProperty); } set { SetValue(BorderThicknessProperty, value); } } #endregion protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters) { Point hitPoint = hitTestParameters.HitPoint; // 在此处实现自定义的命中测试逻辑 if (IsPointInsideCustomRegion(hitPoint)) { return new PointHitTestResult(this, hitPoint); } return null; // 不命中 } private bool IsPointInsideCustomRegion(Point point) { // 在此处检测点是否在自定义区域内 // 返回 true 表示命中,返回 false 表示不命中 return false; } protected Brush CreateFillBrush() { Brush result = null; System.Windows.Media.GradientStopCollection gsc = new System.Windows.Media.GradientStopCollection(); gsc.Add(new System.Windows.Media.GradientStop(((SolidColorBrush)this.Background).Color, 0)); LinearGradientBrush backGroundBrush = new LinearGradientBrush(gsc, new Point(0, 0), new Point(0, 1)); result = backGroundBrush; return result; } } }