我正在使用一个 ListBox,它的 DataTemplate 包含一个 Canvas。然后我绑定包含该画布的网格的左/上,以将其移动到某个点。
然后我想让子网格以我指定的 X,Y 坐标为中心,其中子网格的大小根据其内容而变化。我计划通过使用 TranslateTransform 将 Grid 移动一半宽度来实现这一点。
我看不到如何设置 TranslateTransform,但是因为 ElementName 绑定在 DataTemplate 中不起作用。有什么想法可以实现这一目标吗?
<ItemsControl ItemsSource="{TemplateBinding SomeCollection}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Canvas>
<Grid x:Name="Container"
Canvas.Left="{Binding X}"
Canvas.Top="{Binding Y}"
Background="#88000000">
<Grid.RenderTransform>
<TranslateTransform X="{Binding ActualWidth, ElementName=Container, Converter={StaticResource NegativeHalfConverter}}"
Y="{Binding ActualHeight, ElementName=Container, Converter={StaticResource NegativeHalfConverter}}" />
</Grid.RenderTransform>
<TextBlock Text="{Binding SomeValue}" FontSize="36" Foreground="White" />
</Grid>
</Canvas>
</DataTemplate>
</ItemsControl.ItemTemplate>
`