2011-12-21 23 views
0

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

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

回答

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> 
+0

我做了另一种方式(通过为X和Y偏移量创建一个属性,并将其简单地绑定到一个'Image.RenderTransform',但我想你使用转换器的方式可以工作得一样好。那么这将是我的下一步。谢谢!:) –

+0

当然,祝你好运:-) –

1

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

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

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

你可以写在变换代码。使用发件人对象的cs文件。

+0

感谢您的信息,肯定会尝试其他的东西,我需要的事件。 –