我們使用裝飾器在畫布上拖放,旋轉和調整對象大小。這很好,但是當所有的對象都在canvas或者它的一個子集上被選中,並且我們試着旋轉它們或者調整它們的大小時,每個對象都會朝不同的方向運行。專家可以給我們一些線索,看看能做些什麼?旋轉和調整對象大小
它將被大大的讚賞。
謝謝。
我們使用裝飾器在畫布上拖放,旋轉和調整對象大小。這很好,但是當所有的對象都在canvas或者它的一個子集上被選中,並且我們試着旋轉它們或者調整它們的大小時,每個對象都會朝不同的方向運行。專家可以給我們一些線索,看看能做些什麼?旋轉和調整對象大小
它將被大大的讚賞。
謝謝。
你可能會尋找邊框提出的解決方案在這裏:http://social.msdn.microsoft.com/Forums/en/wpf/thread/54659b47-554c-47da-8158-c944687e7339
阿多諾任何表面已選擇的對象上,因爲這是你的選擇範圍。手動定位和調整裝飾者的大小,而不是使用Adorner的默認行爲。
我有類似的問題。這裏是我實施的代碼:
void DragThumb_DragDelta(object sender, DragDeltaEventArgs e)
{
DesignerItem designerItem = this.DataContext as DesignerItem;
DesignerCanvas designer = VisualTreeHelper.GetParent(designerItem) as DesignerCanvas;
if (designerItem != null && designer != null && designerItem.IsSelected)
{
double minLeft = double.MaxValue;
double minTop = double.MaxValue;
// we only move DesignerItems
var designerItems = designer.SelectionService.CurrentSelection.OfType<DesignerItem>();
foreach (DesignerItem item in designerItems)
{
double left = Canvas.GetLeft(item);
double top = Canvas.GetTop(item);
minLeft = double.IsNaN(left) ? 0 : Math.Min(left, minLeft);
minTop = double.IsNaN(top) ? 0 : Math.Min(top, minTop);
}
double deltaHorizontal = Math.Max(-minLeft, e.HorizontalChange);
double deltaVertical = Math.Max(-minTop, e.VerticalChange);
foreach (DesignerItem item in designerItems)
{
RotateTransform rotateTransform = designerItem.RenderTransform as RotateTransform;
double left = Canvas.GetLeft(item);
double top = Canvas.GetTop(item);
if (double.IsNaN(left)) left = 0;
if (double.IsNaN(top)) top = 0;
if (rotateTransform != null)
{
Point dragDelta = new Point(e.HorizontalChange, e.VerticalChange);
dragDelta = rotateTransform.Transform(dragDelta);
Canvas.SetLeft(item, left + dragDelta.X);
Canvas.SetTop(item, top+ dragDelta.Y);
}
else
{
Canvas.SetLeft(item, left + deltaHorizontal);
Canvas.SetTop(item, top + deltaVertical);
}
}
designer.InvalidateMeasure();
e.Handled = true;
}
}
讓我知道你是否解決了這個問題。