如何将画布的x,y原点更改为Center,WPF

Rob*_*ech 0 wpf canvas wpf-controls

伙计我使用画布作为ItemsPanelTemplate并将其绑定到包含典型行起点和终点的行列表

<ItemsControl ItemsSource="{Binding Path = LineList}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)

现在.我想将中心点移动到画布的中间而不是左上角.我面前的选项很少

  1. 使用值转换器并根据画布大小调整值并显示[调整x和y值]
  2. 如以下帖子中提到的那样转换画布:如何更改画布的x,y原点......?雷的答案

我知道如何通过第一种方法来做到这一点,但是当我尝试通过第二种方法时,它并没有改变坐标系.这是为什么?我刚刚在我的代码中替换了答案,如下所示.我错过了什么吗?

****更新****:以下代码正常工作

<ItemsControl ItemsSource="{Binding Path = LineList}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
           <Canvas>
             <Canvas.LayoutTransform>
               <ScaleTransform ScaleX="1" ScaleY="-1" CenterX=".5" CenterY=".5" />
             </Canvas.LayoutTransform>
          </Canvas>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)

Cle*_*ens 5

示例中的ScaleTransform 的CenterXCenterY属性实际上并不移动Canvas.此外,LayoutTransform无论如何都会忽略翻译(请参阅此处的备注).你可以使用适合RenderTransformCanvas的:

<ItemsPanelTemplate>
    <Canvas>
        <Canvas.RenderTransform>
            <TransformGroup>
                <ScaleTransform ScaleX="2" ScaleY="2"/>
                <TranslateTransform
                    X="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=Canvas}}"
                    Y="{Binding ActualHeight, RelativeSource={RelativeSource AncestorType=Canvas}}"/>
                <ScaleTransform ScaleX="0.5" ScaleY="0.5"/>
            </TransformGroup>
        </Canvas.RenderTransform>
    </Canvas>
</ItemsPanelTemplate>
Run Code Online (Sandbox Code Playgroud)