WPF 装饰器造的Rectangle绑不上事件

dachuyin 2017-09-28 07:37:58
Rectangle _bodyRect;
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绑定事件,不知道为什么总是绑定不上去,有没有大神指导一下,谢谢~
...全文
713 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小恒丶 2017-09-29
  • 打赏
  • 举报
回复
加进去设置在canvas里面的位置 新控件.SetValue(Canvas.LeftProperty, (double)位置); 新控件.SetValue(Canvas.TopProperty, (double)位置);
exception92 2017-09-29
  • 打赏
  • 举报
回复
引用 1 楼 dachuyin 的回复:
这个问题我解决了,有没有大神知道 我给canvas上面new了一个新的空件,然后canvas.children(新控件) 然后取控件的位置都是NaN
不获取Location,而是获取canvas的left与top
dachuyin 2017-09-28
  • 打赏
  • 举报
回复
这个问题我解决了,有没有大神知道 我给canvas上面new了一个新的空件,然后canvas.children(新控件) 然后取控件的位置都是NaN

8,734

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧