在WPF中应用来自DataTemplates的转换

时间:2011-12-21 11:10:27

标签: c# .net wpf datatemplate

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:1)

尝试在Canvas上使用数据绑定'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>