当行为 canvas 的 children 时,如何使用 stretch = Uniform 定位图像?
How to position images with stretch = Uniform when children of a canvas from a behavior?
我的行为是将图像添加为 canvas 的 children:
private static void OnSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var behavior = d as ImageCanvasBehavior;
if (behavior == null)
return;
// The AssoicatedObjec is a Canvas.
Canvas canvas = behavior.AssociatedObject as Canvas;
if (canvas == null)
return;
canvas.Children.Clear();
CroppedBitmap b = (CroppedBitmap)e.NewValue;
Image img = new Image();
img.Source = b;
img.Width = canvas.ActualWidth;
img.Stretch = Stretch.Uniform;
canvas.Children.Add(img);
}
img 添加在 canvas 的水平和垂直的中间位置。他们如何定位到 canvas 的 top-left?
TIA
编辑#1 第一次尝试视觉树:
编辑#2 我认为这是错误的...应该只显示图像,而不是图像上方和下方的所有黑色 space 并且图像不应被剪切掉。
使用附件属性:
Image img = new Image();
img.Source = b;
img.Width = canvas.ActualWidth;
img.Stretch = Stretch.Uniform;
Canvas.SetTop(img, 0);
Canvas.SetLeft(img, 0);
问题已解决。 croppedbitmap 来自位于网格内的 inkcanvas 上的图像。 inkcanvas 左上角的参考点取为:
//translate point to get the position of the media element
var p = ic.PointToScreen(new Point(0, 0));
正确的参考点是通过以下方式获得的:
var p = ic.TranslatePoint(new Point(0, 0), ic.Parent as UIElement);
修复此问题后,其他所有内容都会恢复正常。
我的行为是将图像添加为 canvas 的 children:
private static void OnSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var behavior = d as ImageCanvasBehavior;
if (behavior == null)
return;
// The AssoicatedObjec is a Canvas.
Canvas canvas = behavior.AssociatedObject as Canvas;
if (canvas == null)
return;
canvas.Children.Clear();
CroppedBitmap b = (CroppedBitmap)e.NewValue;
Image img = new Image();
img.Source = b;
img.Width = canvas.ActualWidth;
img.Stretch = Stretch.Uniform;
canvas.Children.Add(img);
}
img 添加在 canvas 的水平和垂直的中间位置。他们如何定位到 canvas 的 top-left?
TIA
编辑#1 第一次尝试视觉树:
编辑#2 我认为这是错误的...应该只显示图像,而不是图像上方和下方的所有黑色 space 并且图像不应被剪切掉。
使用附件属性:
Image img = new Image();
img.Source = b;
img.Width = canvas.ActualWidth;
img.Stretch = Stretch.Uniform;
Canvas.SetTop(img, 0);
Canvas.SetLeft(img, 0);
问题已解决。 croppedbitmap 来自位于网格内的 inkcanvas 上的图像。 inkcanvas 左上角的参考点取为:
//translate point to get the position of the media element
var p = ic.PointToScreen(new Point(0, 0));
正确的参考点是通过以下方式获得的:
var p = ic.TranslatePoint(new Point(0, 0), ic.Parent as UIElement);
修复此问题后,其他所有内容都会恢复正常。