Что я делаю, чтобы достичь того, что вы хотите, это использовать
System.Windows.Controls.Primitives.Thumb
как Root пользовательского элемента управления и установить ControlTemplate для отображения изображения (внутри рамки, но оно должно работать и без), что-то вроде:
<Thumb Name="myRoot" DragDelta="MyRootDragDelta">
<Thumb.Template>
<ControlTemplate>
<Image ... >
... see below ...
</Image>
</ControlTemplate>
</Thumb.Template>
</Thumb>
Кроме того, я связываю источник изображения со свойством класса:
<Image.Source>
<Binding Path="ImageSource" RelativeSource=
{RelativeSource FindAncestor,
AncestorType=my:MyImageControl, AncestorLevel=1}" />
</Image.Source>
UserControl имеет имя TranslateTransform
(скажем, translateTransform
), свойства которого X
и Y
должны быть установлены в обработчике DragDelta
:
private void MyRootDragDelta(object sender, DragDeltaEventArgs e)
{
translateTransform.X += e.HorizontalChange;
translateTransform.Y += e.VerticalChange;
}
Не забудьте добавить:
public ImageSource ImageSource { get; set; }
Надеюсь, это поможет. Если что-то неясно, не стесняйтесь спрашивать дальше.