gpt4 book ai didi

c# - DrawingContext 装饰器 - 可以绘制堆栈面板吗?

转载 作者:太空狗 更新时间:2023-10-30 00:11:58 26 4
gpt4 key购买 nike

使用 DrawingContext 类,我已经能够使用 DrawRectangle() 方法成功地将装饰器添加到我的 adornedElement。

是否可以构造一个堆栈面板,其中包含文本框和图像 - 并将其指定为装饰器?

顺便说一下,我使用的是 visual studio 2010 - 不是 microsoft expression。

非常感谢,

最佳答案

不,这不可能开箱即用,因为 DrawingContext 仅用于绘制 Visuals 而不是 FrameworkElements。您可以做的是创建自己的 Adorner,它能够绘制 FrameworkElements:

  public class FrameworkElementAdorner : Adorner
{
private FrameworkElement _child;

public FrameworkElementAdorner(UIElement adornedElement)
: base(adornedElement)
{
}

protected override int VisualChildrenCount
{
get { return 1; }
}

public FrameworkElement Child
{
get { return _child; }
set
{
if (_child != null)
{
RemoveVisualChild(_child);
}
_child = value;
if (_child != null)
{
AddVisualChild(_child);
}
}
}

protected override Visual GetVisualChild(int index)
{
if (index != 0) throw new ArgumentOutOfRangeException();
return _child;
}

protected override Size MeasureOverride(Size constraint)
{
_child.Measure(constraint);
return _child.DesiredSize;
}

protected override Size ArrangeOverride(Size finalSize)
{
_child.Arrange(new Rect(new Point(0, 0), finalSize));
return new Size(_child.ActualWidth, _child.ActualHeight);
}
}

用法:

  var fweAdorner = new FrameworkElementAdorner(adornedElement);

//Create your own Content, here: a StackPanel with some stuff inside
var stackPanel = new StackPanel();
stackPanel.Children.Add(new TextBox() { Text="TEST"});
stackPanel.Children.Add(new Image());

fweAdorner.Child = stackPanel;

var adornerLayer = AdornerLayer.GetAdornerLayer(adornedElement);
adornerLayer.Add(fweAdorner);

如果您多次使用 StackPanel 的这种组合,您还可以将 StackPanel 的创建直接合并到 Adorner 中。这取决于您的情况。

关于c# - DrawingContext 装饰器 - 可以绘制堆栈面板吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8576594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com