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