【发布时间】:2014-07-01 02:23:30
【问题描述】:
我想在Canvas 上定位元素(在我的情况下,它是几个图形和文本元素)并通过Transform转换这些元素的位置,但不是 转换元素本身。 Transform 需要动态更改,例如调整大小或更改旋转角度。我不想触碰元素,只想触碰我绑定的变换。
我现在拥有的:
<UserControl x:Class="IDEAUserInterfaces.StationaryUI.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<TranslateTransform x:Key="translate" X="10" Y="10"/>
<ScaleTransform x:Key="scale" ScaleX="0.8" ScaleY="1.3"/>
<RotateTransform x:Key="rotate" Angle="30"/>
<TransformGroup x:Key="group">
<StaticResource ResourceKey="translate"/>
<StaticResource ResourceKey="scale"/>
<StaticResource ResourceKey="rotate"/>
</TransformGroup>
</UserControl.Resources>
<Grid>
<Canvas Width="100" Height="100">
<Canvas Name="elementCanvas" Canvas.Top="15" Canvas.Left="20">
<Path Stroke="Green" StrokeThickness="1">
<Path.Data>
<EllipseGeometry RadiusX="5" RadiusY="5" Center="0,0" Transform="{Binding StaticResource group}"/>
</Path.Data>
</Path>
<TextBlock Text="Text" Canvas.Left="10" FontSize="10"/>
</Canvas>
</Canvas>
</Grid>
</UserControl>
显然 elementCanvas 的位置设置了包含的图形和文本的位置。在EllipseGeometry 上设置Transform 会转换整个几何图形。我发现无法在 XAML 中转换 Point,例如 EllipseGeomtry 的 Center-property。这仍然不会改变TextBlock 的位置。
我认为,转换 Canvas.Top 和 Canvas.Left 就足够了,但是如何做到这一点呢?
【问题讨论】: