2011-12-20 19 views
0

イメージを含む要素からユーザーコントロールを取得しようとしています。その目的は、イメージを変更するだけで共通のビジュアル要素を再利用できるようにすることです。例えば:ユーザーコントロールに変数イメージを追加する方法

制御の使用:

<DataTemplate DataType={x:Type myType}> 
    <local:MyControl PlotIconSource="..\Images\Scatter.png"/> 
</DataTemplate> 

画像制御最後

<UserControl x:Class="MyControl"> 
    <Image Source="{Binding PlotIconSource}"/> 
</UserControl> 

MyControl.xaml.csのコードビハインドでPlotIconSourceの依存性内部。

public ImageSource PlotIconSource 
    { 
     get { return (ImageSource)GetValue(PlotIconSourceProperty); } 
     set { SetValue(PlotIconSourceProperty, value); } 
    } 

    public static readonly DependencyProperty PlotIconSourceProperty = 
     DependencyProperty.Register(
      "PlotIconSource", 
      typeof(ImageSource), 
      typeof(PlotHeader), 
      new UIPropertyMetadata()); 

私は道に沿って何かを逃してしまったので、どんな助けにも感謝します。

答えて

1

あなたはRelativeSourceを介して、またはElementNameと結合することがあります:

<UserControl x:Class="MyControl" Name="control"> 
    <Image Source="{Binding PlotIconSource, ElementName=control}"/> 
</UserControl> 

DataContextを設定しないでください、それは継承されたDataContextのために意味のバインディングと外と混乱から見えなくなります)

+0

無駄に;しかし、ElementNameアプローチを使用していました。どのようにElementNameなしでそれを行うにはどのようなアイデア? –

+0

RelativeSourceは 'Source =" {Binding RelativeSource = {RelativeSource AncestorType = UserControl}、Path = PlotIconSource}で働いていました ""問題は、 'Self'が' UserControl'を含むのではなく 'Image'を参照していたことです。正しい方向に私を指してくれてありがとう。 –

+0

あなたが大歓迎です、うれしかったです。まあ、私が言ったのは、まさに私が意味していた相対的な情報源ですが、私はそれが明らかだと思いました... –

0

私には正しいと思われますが、エラーメッセージなどが表示されますか?

+0

I 「取得中」System.Windows.Dataエラー:40:BindingExpressionパスエラー: 'PlotIconSource'プロパティが 'オブジェクト'に見つかりません '' ScatterPlotViewModel '(HashCode = 40544074)' BindingExpression:Path = PlotIconSource; DataItem = 'ScatterPlotViewModel'( HashCode = 40544074);ターゲット要素は 'Image'(Name = '');ターゲットプロパティ"Image Source"(タイプ "ImageSource") " –

+0

ああ、もちろん...データコンテキスト/バインディングが不足している要素です –

関連する問題