WPF 装饰器造的Rectangle绑不上事件
private Path _border;
private VisualCollection _visuals;
private FrameworkElement _adornedElement;
public FocusAdorner(UIElement adornedElement) : base(adornedElement)
{
_adornedElement = this.AdornedElement as FrameworkElement;
_visuals = new VisualCollection(this);
CreateGrip();
AddEvents();
}
protected override Size ArrangeOverride(Size finalSize)
{
_bodyRect.Arrange(new Rect(2, 2, finalSize.Width - 4, finalSize.Width - 4));
RectangleGeometry rect = new RectangleGeometry(new Rect(0, 0, _adornedElement.ActualWidth + 2, _adornedElement.ActualHeight + 2));
_border.Data = rect;
_border.Arrange(new Rect(-1, -1, finalSize.Width + 2, finalSize.Height + 2));
return base.ArrangeOverride(finalSize);
}
private void CreateGrip()
{
_bodyRect = InitBodyRect();
if (_adornedElement is AddButton)
{
if ((_adornedElement as AddButton).IsEditing)
{
_bodyRect.IsHitTestVisible = false;
}
}
_bodyRect.Cursor = Cursors.Hand;
_border = new Path();
_border.StrokeThickness = 2;
_border.Stroke = new SolidColorBrush(Colors.Red);
_visuals.Add(_bodyRect);
_visuals.Add(_border);
}
private void AddEvents()
{
_bodyRect.PreviewMouseDown += BodyRectOnPreviewMouseDown;
}
private void BodyRectOnPreviewMouseDown(object sender, MouseButtonEventArgs mouseButtonEventArgs)
{
MessageBox.Show("aaaa");
}
private Rectangle InitBodyRect()
{
Rectangle rect = new Rectangle();
rect.Stroke = Brushes.Transparent;
SolidColorBrush b = new SolidColorBrush(Colors.Transparent);
rect.Fill = b;
return rect;
}
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
}
protected override Visual GetVisualChild(int index)
{
return _visuals[index];
}
protected override int VisualChildrenCount
{
get
{
return _visuals.Count;
}
}
这是我的代码,然后我想给_bodyRect绑定事件,不知道为什么总是绑定不上去,有没有大神指导一下,谢谢~
相关推荐
WPF中的事件与命令
介绍了WPF中的事件和命令,文档比较详细。
WPF图形绘制:Stretch属性四种模式详解与布局容器协同
在图形界面开发中,控件的尺寸适配与布局是核心基础概念。其原理在于布局系统为每个控件分配可用空间后,控件需要根据自身属性决定如何填充该空间。WPF中的Stretch属性正是解决这一问题的关键技术,它定义了当图形逻辑尺寸与分配空间不一致时的填充策略。从技术价值看,掌握Stretch能实现从固定图标到自适应背景的各种渲染效果,避免图形变形或显示异常。在实际应用场景中,结合Grid、Canvas等不同容器,Stretch的四种模式——None、Fill、Uniform和UniformToFill——会产生截然不同的
wpf 绘制矩形 可动态调整矩形大小
WPF工程 可绘制多个矩形 绘制结束后可拖动矩形的四个角 动态改变矩形大小
WPF经典教程之[11]键盘输入、鼠标输入、焦点处理
WPF提供了基础的键盘类(System.Input.Keyboard类),该类提供与键盘相关的事件、方法和属性,这些事件、方法和属性提供有关键盘状态的信息。Keyboard的事件也通过UIElement等XAML基元素类的事件向外提供。 对于键盘操作,其常用的事件有两组..... (更多资源:http://cleopard.download.csdn.net/) (福利:http://xuemeilaile.com/) WPF经典教程之WPF体系结构 http://download.csdn.net/detail/cleopard/7999393 WPF经典教程之WPF应用程序管理 http://download.csdn.net/detail/cleopard/8002969 WPF经典教程之WPF窗体 http://download.csdn.net/detail/cleopard/8002979 WPF经典教程之StackPanel、WrapPanel、DockPanel布局 http://download.csdn.net/detail/cleopard/8002985 WPF经典教程之Grid、UniformGrid布局 http://download.csdn.net/detail/cleopard/8002993 WPF经典教程之Canvas、InkCanvas布局 http://download.csdn.net/detail/cleopard/8002997 WPF经典教程之WPF控件模型 http://download.csdn.net/detail/cleopard/8002999 WPF经典教程之WPF控件内容模型 http://download.csdn.net/detail/cleopard/8003009 等。。。。
WPF 鼠标拖框,反拖正拖都可以
WPF鼠标拖动画线框代码,简单实现.网上找到个例子,但没有实现反拖,做了代码下修改,实现反拖正拖都可以.


