C# 在WPF中逐个应用时,旋转和变换不起作用
我正在旋转面板(栅格)并翻转(变换)面板。当我分开做这件事时,两者都很好。先旋转再翻转(或)先翻转再旋转无法正常工作 我每次都将面板旋转90度。当我旋转到90度时,面板的高度和宽度会发生变化。在这种情况下,如果我翻转面板,问题就会出现。对于180度,没有问题 发布步骤 第1步:单击示例中的旋转按钮,将图像旋转90度。您将获得以下输出 第二步:现在通过“变换”按钮翻转图像,图像移到左侧。预期的输出是,它应该是中心和翻转 通过直接单击“变换”按钮,而不单击“旋转”,可以看到图像变换的差异 这是我的密码 [XAML]:C# 在WPF中逐个应用时,旋转和变换不起作用,c#,wpf,xaml,C#,Wpf,Xaml,我正在旋转面板(栅格)并翻转(变换)面板。当我分开做这件事时,两者都很好。先旋转再翻转(或)先翻转再旋转无法正常工作 我每次都将面板旋转90度。当我旋转到90度时,面板的高度和宽度会发生变化。在这种情况下,如果我翻转面板,问题就会出现。对于180度,没有问题 发布步骤 第1步:单击示例中的旋转按钮,将图像旋转90度。您将获得以下输出 第二步:现在通过“变换”按钮翻转图像,图像移到左侧。预期的输出是,它应该是中心和翻转 通过直接单击“变换”按钮,而不单击“旋转”,可以看到图像变换的差异 这是我
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<Grid x:Name="grid1" Grid.Row="0">
<Image x:Name="image1" Source="Images/Buldingimage.jpeg"/>
</Grid>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Click="Button_Click_1" Grid.Column="0">Rotate</Button>
<Button Click="Button_Click_2" Grid.Column="1">Transform</Button>
</Grid>
</Grid>
double rotationAngle = 0;
private void Button_Click_1(object sender, RoutedEventArgs e)
{
//Rotate
this.rotationAngle += 90;
this.grid1.RenderTransformOrigin = new Point(0.5, 0.5);
this.grid1.LayoutTransform = new RotateTransform() { Angle = this.rotationAngle };
}
bool mIsHorizontalImageflipped = false;
private void Button_Click_2(object sender, RoutedEventArgs e)
{
//Transform
int[] value ;
float[] origin = new float[] { 0.5f, 0.5f };
string path = "(UIElement.RenderTransform).(ScaleTransform.ScaleX)";
if (!this.mIsHorizontalImageflipped)
{
value = new int[] { 1, -1 };
this.mIsHorizontalImageflipped = true;
}
else
{
this.mIsHorizontalImageflipped = false;
value = new int[] { -1, 1 };
}
this.Animate(value, origin, path);
}
internal void Animate(int[] value, float[] origin, string path)
{
this.grid1.RenderTransform = new ScaleTransform();
Storyboard sb = new Storyboard();
this.grid1.RenderTransformOrigin = new Point(origin[0], origin[1]);
DoubleAnimationUsingKeyFrames keyFrames = new DoubleAnimationUsingKeyFrames();
SplineDoubleKeyFrame keyFrame = new SplineDoubleKeyFrame();
keyFrame.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0));
keyFrame.Value = value[0];
keyFrames.KeyFrames.Add(keyFrame);
keyFrame = new SplineDoubleKeyFrame();
keyFrame.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(1));
KeySpline keySpline = new KeySpline();
keySpline.ControlPoint1 = new Point(0.64, 0.84);
keySpline.ControlPoint2 = new Point(0, 1);
keyFrame.KeySpline = keySpline;
keyFrames.KeyFrames.Add(keyFrame);
keyFrame.Value = value[1];
Storyboard.SetTargetProperty(keyFrames, new PropertyPath(path));
Storyboard.SetTarget(keyFrames, this.grid1);
sb.Children.Add(keyFrames);
sb.Begin();
}
下载示例
请提供建议或我在这方面做错了什么
问候,
Bharathi.如果将
RenderTransform
属性设置为ScaleTransform
,则实际上是在删除RotateTransform
,反之亦然
为了能够同时应用两种转换,您可以使用TransformGroup
:
<Grid x:Name="grid1" Grid.Row="0">
<Image x:Name="image1" Source="Images/Buldingimage.jpeg"/>
<Grid.RenderTransform>
<TransformGroup>
<RotateTransform x:Name="rt" />
<ScaleTransform x:Name="st" />
</TransformGroup>
</Grid.RenderTransform>
</Grid>
“工作不正常…出现问题”-什么类型的问题?旋转90度后,然后翻转,图像位置移动错误。不在中心请注意,RenderTransformorMorigin(顾名思义)对LayoutTransform没有影响。如果您需要同时应用多个转换,请使用TransformGroup或MatrixTransform进行RenderTransform。@Clemens您能从上面的链接查看我的示例并提供更好的解决方案吗?也许可以详细说明您正试图实现的目标。现在我还不清楚。谢谢你的回答。我会尽快核实的。。我现在正在度假。
double rotationAngle = 0;
private void Button_Click_1(object sender, RoutedEventArgs e)
{
//Rotate
this.rotationAngle += 90;
this.grid1.RenderTransformOrigin = new Point(0.5, 0.5);
rt.Angle = this.rotationAngle;
}
bool mIsHorizontalImageflipped = false;
private void Button_Click_2(object sender, RoutedEventArgs e)
{
//Transform
int[] value;
float[] origin = new float[] { 0.5f, 0.5f };
string path = "RenderTransform.Children[1].ScaleX";
if (!this.mIsHorizontalImageflipped)
{
value = new int[] { 1, -1 };
this.mIsHorizontalImageflipped = true;
}
else
{
this.mIsHorizontalImageflipped = false;
value = new int[] { -1, 1 };
}
this.Animate(value, origin, path);
}
internal void Animate(int[] value, float[] origin, string path)
{
Storyboard sb = new Storyboard();
this.grid1.RenderTransformOrigin = new Point(origin[0], origin[1]);
DoubleAnimationUsingKeyFrames keyFrames = new DoubleAnimationUsingKeyFrames();
SplineDoubleKeyFrame keyFrame = new SplineDoubleKeyFrame();
keyFrame.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0));
keyFrame.Value = value[0];
keyFrames.KeyFrames.Add(keyFrame);
keyFrame = new SplineDoubleKeyFrame();
keyFrame.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(1));
KeySpline keySpline = new KeySpline();
keySpline.ControlPoint1 = new Point(0.64, 0.84);
keySpline.ControlPoint2 = new Point(0, 1);
keyFrame.KeySpline = keySpline;
keyFrames.KeyFrames.Add(keyFrame);
keyFrame.Value = value[1];
Storyboard.SetTargetProperty(keyFrames, new PropertyPath(path));
Storyboard.SetTarget(keyFrames, this.grid1);
sb.Children.Add(keyFrames);
sb.Begin();
}