H.B.答え私は自分の問題を解決する。たぶん誰かが私の解決に役立つだろう。私の魅力のように働く:原点= 0.5,0.5回転; 0,0のようなスケール
XAML:
<ScrollViewer Grid.Row="1"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto">
<Canvas x:Name="canvas"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Width="{Binding CanvasW}"
Height="{Binding CanvasH}"
>
<Image HorizontalAlignment="Center"
Stretch="None"
x:Name="image1"
VerticalAlignment="Center"
RenderTransformOrigin="{Binding TransformOrigin}">
<Image.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="{Binding Zoom}"
ScaleY="{Binding Zoom}" />
<RotateTransform Angle="{Binding RotateAngle}" />
<TranslateTransform X="{Binding TransX}"
Y="{Binding TransY}" />
</TransformGroup>
</Image.RenderTransform>
</Image>
</Canvas>
<ScrollViewer/>
のViewModel:
public double Zoom
{
get { return zoom; }
set
{
if (value != zoom)
{
zoom = value;
RaisePropertyChanged("Zoom");
RaisePropertyChanged("CanvasH");
RaisePropertyChanged("CanvasW");
RaisePropertyChanged("TransX");
RaisePropertyChanged("TransY");
}
}
}
public double TransX
{
get
{
if (imageSource != null)
{
return ((imageSource.Width *zoom - imageSource.Width)/2;
}
return 0;
}
}
public double TransY
{
get
{
if (imageSource != null)
{
return (imageSource.Height * zoom - imageSource.Height)/2;
}
return 0;
}
}
public double CanvasH
{
get
{
if (imageSource!=null)
{
return imageSource.Height*zoom;
}
return canvasH;
}
}
public double CanvasW
{
get
{
if (imageSource != null)
{
return imageSource.Width*zoom;
}
return canvasW;
}
なぜあなたはまた、CenterXとCenterYプロパティをバインドしませんか? – Clemens
問題を解決するためにこれを行う方法がわかりません。たとえば、スケールの後でRenderTransformOriginを変更し、異なる起点で回転すると、私の以前のスケールは新しいスケールで再レンダリングされます。私は 連続したtranformationsが必要だと思います。 – Vilix