C# 使用Y轴反转的ScaleTransform进行缩放
我的XAML:C# 使用Y轴反转的ScaleTransform进行缩放,c#,wpf,C#,Wpf,我的XAML: <ScrollViewer Name="MyScrollViewer" CanContentScroll="True"> <Grid Grid.Column="1" Margin="10"> MouseWheel="Grid_OnMouseWheel"> <Grid.RenderTransform> <ScaleTransform ScaleY="-1" /> </Grid.RenderTransform> ...
<ScrollViewer Name="MyScrollViewer" CanContentScroll="True">
<Grid Grid.Column="1" Margin="10">
MouseWheel="Grid_OnMouseWheel">
<Grid.RenderTransform>
<ScaleTransform ScaleY="-1" />
</Grid.RenderTransform>
...
</Grid>
</ScrollViewer>
mouseweel=“Grid\u onmouseweel”>
...
我的代码:
如您所见,我需要左下角的零Y坐标:
private void Grid_OnMouseWheel(object sender, MouseWheelEventArgs e)
{
UIElement element = (UIElement)sender;
Point position = e.GetPosition(element);
double Width = element.RenderSize.Width;
double Height = element.RenderSize.Height;
Matrix GridMatrix = GUIGrid.LayoutTransform.Value;
if (e.Delta > 0)
{
ScaleFactor += 1;
ScaleTransform Transform = new ScaleTransform(ScaleFactor, ScaleFactor, position.X, position.Y);
Transform.ScaleY = -ScaleFactor;
GUIGrid.RenderTransform = Transform;
}
else
{
ScaleFactor -= 1;
if (ScaleFactor <= 0)
ScaleFactor = 1;
ScaleTransform Transform = new ScaleTransform(ScaleFactor, ScaleFactor, position.X, position.Y);
Transform.ScaleY = -ScaleFactor;
GUIGrid.RenderTransform = Transform;
}
e.Handled = true;
}
MouseWheel(对象发送者,MouseWheelEventArgs e)上的私有无效网格
{
UIElement=(UIElement)发送方;
点位置=e.GetPosition(元素);
双宽度=element.renderize.Width;
双重高度=element.renderize.Height;
矩阵GridMatrix=GUIGrid.LayoutTransform.Value;
如果(e.Delta>0)
{
ScaleFactor+=1;
ScaleTransform转换=新的ScaleTransform(ScaleFactor,ScaleFactor,position.X,position.Y);
Transform.ScaleY=-ScaleFactor;
GUIGrid.RenderTransform=转换;
}
其他的
{
ScaleFactor-=1;
如果(ScaleFactor好的,没有我希望的那么简单,而且文档很差
ScaleTransform Transform = new ScaleTransform();
Transform.Value.ScaleAtPrepend(ScaleFactor, ScaleFactor, Position.X, Position.Y);
Transform.ScaleX = ScaleFactor;
Transform.ScaleY = -ScaleFactor;
GUIGrid.RenderTransform = Transform;
现在工作和我预期的一样