在WPF中应用来自DataTemplates的转换

本文关键字:DataTemplates 转换 WPF 应用 | 更新日期: 2023-09-27 18:18:24

我在ResourceDictionary文件中为我的对象创建了一个DataTemplate。模板基本上是从磁盘加载的映像。现在,发生的事情是,我想对齐图像到我的画布上的一个特定的点,但不是它的左上角的点,而是它的中心点,这就是为什么我想对X = -Width / 2和应用平移变换Y = -Height / 2,但我不知道如何通过DataTemplate应用它们。

任何帮助将不胜感激,谢谢!

在WPF中应用来自DataTemplates的转换

尝试使用画布'的AttachedProperties和IValueConverter上的数据绑定来转换偏移量到任何你想要的。

例如:

class ImageToCanvasConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return -(int)value / 2;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // Two-way binding not supported
        throw new InvalidOperationException(); 
    }
}
<Grid.Resources>
    <myAssembly:ImageToCanvasConverter x:Key="imageToCanvasConverter" />
    <DataTemplate ...>
        <Image Canvas.Left="{Binding Path=Width, Converter={StaticResource imageToCanvasConverter}, Mode=OneTime}"
               Canvas.Top="{Binding Path=Height, Converter={StaticResource imageToCanvasConverter}, Mode=OneTime}"
               ... />
    </DataTemplate>
</Grid.Resources>

您可以利用在数据模板子模板上使用加载事件的优势例子:

如果你使用网格作为数据模板内容

<DataTemplate>
 <Grid Loaded="Grid_Loaded">
   <Image></Image>
 </Grid>
</DataTemplate>

您可以使用sender对象在.cs文件中编写转换代码。