Я использую ZoomControl от WPFExtensions. Исходный код: here.MeasureOverride и ArrangeOverride не называются
Я добавил Adorner методом 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>
Применение Adorner:
public Window1()
{
InitializeComponent();
image1.Loaded += loaded;
}
private void loaded(object sender, RoutedEventArgs e)
{
var adorner = new SplitAdorner(image1);
AdornerLayer.GetAdornerLayer(image1).Add(adorner);
}
Когда я тащу контроль изображения, мой 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 не движется.
Когда я увеличиваю масштаб - все в порядке. Adorner изменяет свою позицию в соответствии с изменениями Image control.
Проблема в моем коде или в ZoomControl?
Пример приложения here.
РЕШЕНИЕ:
я должен был поставить мой холст в 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>
описание here.
Но как насчет масштабирования? Когда я увеличиваю изображение, adorner меняется автоматически. Поэтому трансформация применяется как-то. – ieaglle
Да, это меня озадачивает. Он должен масштабироваться и панорамироваться каким-либо образом, за исключением того, что вы каким-либо образом изменяете отображаемый контент, я проверю ваш код. А пока вы попробовали мой совет? – dowhilefor
Выполняется ...:) – ieaglle