0
我有一个画布控制,我动态添加不同的形状。我已经通过使用ScaleTransform和TranslateTransform平移实现了缩放。如果我必须放大和缩小而不调整形状在画布上(即调整画布的大小而不调整其子项),我将如何实现这一目标?缩放和平移问题翻译/ ScaleTransform WPF
感谢,
BR,
我有一个画布控制,我动态添加不同的形状。我已经通过使用ScaleTransform和TranslateTransform平移实现了缩放。如果我必须放大和缩小而不调整形状在画布上(即调整画布的大小而不调整其子项),我将如何实现这一目标?缩放和平移问题翻译/ ScaleTransform WPF
感谢,
BR,
下面的简单衍生帆布将安排在通过Canvas.Left
和Canvas.Top
属性值给出转化位置的子元素。该转换由ChildPositionTransform
依赖项属性应用。
public class ZoomCanvas : Canvas
{
public static readonly DependencyProperty ChildPositionTransformProperty =
DependencyProperty.Register(
"ChildPositionTransform", typeof(Transform), typeof(ZoomCanvas),
new FrameworkPropertyMetadata(
Transform.Identity, FrameworkPropertyMetadataOptions.AffectsArrange));
public Transform ChildPositionTransform
{
get { return (Transform)GetValue(ChildPositionTransformProperty); }
set { SetValue(ChildPositionTransformProperty, value); }
}
protected override Size ArrangeOverride(Size finalSize)
{
foreach (UIElement element in InternalChildren)
{
var x = GetLeft(element);
var y = GetTop(element);
var pos = new Point(double.IsNaN(x) ? 0d : x, double.IsNaN(y) ? 0d : y);
ArrangeElement(element, ChildPositionTransform.Transform(pos));
}
return finalSize;
}
private void ArrangeElement(UIElement element, Point position)
{
element.Arrange(new Rect(position, element.DesiredSize));
}
}
现在你也可以采取子元素的HorizontalAlignment
和VerticalAlignment
属性考虑在内,通过细化ArrangeElement方法。
private void ArrangeElement(UIElement element, Point position)
{
if (element is FrameworkElement)
{
switch (((FrameworkElement)element).HorizontalAlignment)
{
case HorizontalAlignment.Center:
position.X -= element.DesiredSize.Width/2;
break;
case HorizontalAlignment.Right:
position.X -= element.DesiredSize.Width;
break;
default:
break;
}
switch (((FrameworkElement)element).VerticalAlignment)
{
case VerticalAlignment.Center:
position.Y -= element.DesiredSize.Height/2;
break;
case VerticalAlignment.Bottom:
position.Y -= element.DesiredSize.Height;
break;
default:
break;
}
}
element.Arrange(new Rect(position, element.DesiredSize));
}
你能发布你的代码吗? – 2013-03-27 18:52:41
我认为粘贴代码不会有帮助。我没有做任何需要纠正的事情,建议我一些东西,这是我想问的。 – 2013-03-27 19:08:48
如果你没有做任何事情,你不应该问别人的帮助。看看大多数负面评分的帖子。你会发现大多数评论都在问**你有什么试过?** – 2013-03-27 19:12:35