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;
}
}
}