我使用的是来自ZoomControl的WPFExtensions。源代码是这里。
我使用OnRender方法添加了装饰器:
protected override void OnRender(DrawingContext drawingContext)
{
drawingContext.DrawEllipse(
new SolidColorBrush(Colors.CornflowerBlue),
null,
new Point(1292, 100),
100, 100);
} 使用ZoomControl xaml:
<Controls:ZoomControl x:Name="zoomControl1" Background="AliceBlue">
<Canvas Width="{Binding Path=SModel.Width}" Height="{Binding Path=SModel.Height}">
<Image HorizontalAlignment="Center"
Name="image1" Stretch="Fill"
VerticalAlignment="Center" Source="/Z;component/Images/00000006.jpg"
Margin="0,0,0,0" Canvas.Left="1"
Width="{Binding Path=SModel.Width}" Height="{Binding Path=SModel.Height}">
<Image.LayoutTransform>
<RotateTransform Angle="{Binding Path=SModel.Angle}" />
</Image.LayoutTransform>
</Image>
</Canvas>
</Controls:ZoomControl>应用装饰:
public Window1()
{
InitializeComponent();
image1.Loaded += loaded;
}
private void loaded(object sender, RoutedEventArgs e)
{
var adorner = new SplitAdorner(image1);
AdornerLayer.GetAdornerLayer(image1).Add(adorner);
}当我拖动图像控件时,我的装饰器不会移动。
我尝试过重写ArrangeOverride和MeasureOverride:
protected override Size MeasureOverride(Size constraint)
{
Debug.WriteLine("measureoverride");
InvalidateVisual();
return base.MeasureOverride(constraint);
}
protected override Size ArrangeOverride(Size finalSize)
{
Debug.WriteLine("arrangeoverride");
InvalidateVisual();
return base.ArrangeOverride(finalSize);
}但没有效果。输出窗口中没有任何内容,装饰器也没有移动。
当我放大的时候-一切都很好。Adorner将其位置相应地更改为图像控制更改。
问题在我的代码中还是在ZoomControl中?
示例应用程序是这里。
解决方案:
我不得不把我的画布放到AdornerDecorator中:
<Controls:ZoomControl x:Name="zoomControl1" Background="AliceBlue">
<AdornerDecorator>
<Canvas Width="{Binding Path=SModel.Width}" Height="{Binding Path=SModel.Height}">
<Image HorizontalAlignment="Center"
Name="image1" Stretch="Fill"
VerticalAlignment="Center" Source="/Z;component/Images/00000006.jpg"
Margin="0,0,0,0" Canvas.Left="1"
Width="{Binding Path=SModel.Width}" Height="{Binding Path=SModel.Height}">
<Image.LayoutTransform>
<RotateTransform Angle="{Binding Path=SModel.Angle}" />
</Image.LayoutTransform>
</Image>
</Canvas>
</AdornerDecorator>
</Controls:ZoomControl>描述是这里。
发布于 2012-01-03 15:29:02
好的,我查看了您的示例应用程序,并检查了它与窥探。因此,该转换似乎也被应用于您的装饰器,但视觉并没有得到正确的更新。平移实际上是有效的,它只是你的装饰品没有被正确的失效。一个快速的想法是为缩放、转换x、转换y和设置属性标志"AffectsRender“提供装饰器依赖属性,并将它们从缩放控件绑定到画布上。现在,每当缩放控件修改这些属性之一时,装饰器属性就会通过绑定更新,并通过"AffectsRender“标志直接失效。
第一个答案,但无效
您是否将缩放控件的转换应用于装饰器?因为一个装饰器没有放在控件上,实际上它是在下一个AdornerDecorator中注册的,所以在提供的控件上向上发现。我的猜测是,唯一找到的装饰器(或层)是窗口上的默认装饰。将控件的转换应用于您的装饰器,它应该可以工作。或者你可以在你的控制系统中放置一个AdornerDecorator,但老实说,我不确定这是否达到了预期的效果。
https://stackoverflow.com/questions/8713726
复制相似问题