C# RenderTransferMorigin不工作。UWP

C# RenderTransferMorigin不工作。UWP,c#,.net,.net-core,uwp,uwp-xaml,C#,.net,.net Core,Uwp,Uwp Xaml,我有一个问题,我不知道如何解决它。我有一个UWP应用程序。在XAML中有一个具有RenderTransferMorigin的网格。但是当我改变网格的宽度时,我会给出什么值并不重要,宽度是从中心开始计算的 这是XAML <Page x:Class="TestApp.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/w

我有一个问题,我不知道如何解决它。我有一个UWP应用程序。在XAML中有一个具有RenderTransferMorigin的网格。但是当我改变网格的宽度时,我会给出什么值并不重要,宽度是从中心开始计算的

这是XAML

<Page
x:Class="TestApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TestApp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid Background="White">

    <Grid Background="Red" x:Name="image" RenderTransformOrigin="0,0">
        <Grid.RenderTransform>
            <CompositeTransform />
        </Grid.RenderTransform>
        <Border x:Name="LeftScale" Width="50" Height="50" Background="Black" HorizontalAlignment="Left" VerticalAlignment="Center" ManipulationDelta="LeftScale_ManipulationDelta" ManipulationMode="TranslateX,TranslateY" />

    </Grid>

</Grid>

感谢您的关注。

RenderTransferorMorigin适用于转换。此转换需要由您定义的
CompositeTransform
完成。不能通过更改
Width
属性来更改它

您可以重写代码并尝试以下操作:

Page.xaml


Page.xaml.cs

公共点原点{get;set;}
公共主页()
{
this.InitializeComponent();
图像宽度=500;
图像。高度=500;
}
私有无效滑块\u值已更改(对象发送方,RangeBaseValueChangedEventArgs e)
{
原点=新点(1,0.5);
image.renderTransferMorigin=原点;
变量比例=e.NewValue/image.Width;
imageCompositeTransform.ScaleX=1-比例;
}
通过
ScaleX
(而不是
width
)转换控件的宽度,以便
rendertransferormorigin
可以生效


更新

如果希望通过原始代码对网格进行宽度转换,请使用以下方法:

private-double-moveX=0;
私有void LeftScale_操纵delta(对象发送方,操纵deltaroutedventargs e)
{
moveX-=e.Delta.Translation.X;
变量比例=moveX/image.Width;
imageCompositeTransform.ScaleX=1-比例;
}
但是,由于
矩形
位于
网格
内,因此变换
网格
宽度时,
矩形
的宽度也会改变。如果要保持矩形的大小不变,建议将其移出


最诚挚的问候。

谢谢你的回答,这对我帮助很大。但问题是,我需要用鼠标的位置来做,而不是用滑块。谢谢你的回复。代码工作得很好。这就是我想要的。
public sealed partial class MainPage : Page
{
    public Point Origin { get; set; }
    public MainPage()
    {
        this.InitializeComponent();
        image.Width = 500;
        image.Height = 500;
    }

    private void LeftScale_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
    {
        Origin = new Point(1, 0.5);
        image.RenderTransformOrigin = Origin;
        image.Width -= e.Delta.Translation.X;
    }
}