2011-12-21 3 views
0

ResourceDictionaryファイルでオブジェクト用のDataTemplateを作成しました。テンプレートは基本的にディスクからロードされるイメージです。さて、キャンバス上の特定のポイントに画像をアライメントしたいのですが、左上のポイントではなく中心ポイントでアライメントしたいのですから、X = -Width/2Y = -Height/2の変換変換を適用したいのですが、私は変換しませんDataTemplateを介してそれらを適用する方法を知っています。WPTの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

おかげで、間違いなく他のもののために私がイベントを必要とすることを試みます。 –

関連する問題