2011-07-08 7 views
1

私はデータを読み込んで対話型プリンタマップに出力しています。プリンタ位置決めデータには、プリンタのx座標、y座標、メイク、モデル、およびIPが含まれます。私はこのデータを使ってイメージを作成し、それを配置します。問題は、make、モデル、およびIPをイメージにバインドする方法を理解しようとしているため、将来のやりとりで簡単に読むことができるということです。たとえば、次のようなものが良いでしょう: printerImage.Attribute("Make", "HP"); これは可能ですか?Silverlightの要素にデータを追加する

答えて

2

は、それはあなたが必要とするすべてのプロパティを持っているので、あなたはまだ行っていない場合は、クラスを自分で作成し、データソースは、すでに提供することができる。

public static class PrinterImageExtensions 
{ 
    public static readonly DependencyProperty PrinterMakeProperty = 
     DependencyProperty.RegisterAttached("PrinterMake", typeof(string), typeof(ImageExtensions), new PropertyMetadata(null)); 

    public static string GetPrinterMake(Image obj) 
    { 
     return (string)obj.GetValue(PrinterMakeProperty); 
    } 

    public static void SetPrinterMake(Image obj, string value) 
    { 
     obj.SetValue(PrinterMakeProperty, value); 
    } 

    // ... 
} 

次に、このように添付プロパティを使用しますオブジェクト。

Imageを含むすべてFrameworkElementsには、正確な理由で使用されるTagプロパティがあります。あなたはその後、あなたが必要とする情報を盗んでき

printerImage.Tag = instanceOfYourPrinterInfoClass; 

: -

YourPrinterInfoClass info = printerImage.Tag as YourPrinterInfoClass; 

編集

は、おそらくオブジェクトを割り当てるTagより良い場所がDataContextであると述べました。たとえば、マウスが画像の上に移動したときにこれらの詳細をレンダリングするツールチップを追加することができます。

1

あなたはSystem.Windows.Controls.Imageを使用していますが、正しいですか?その場合はDependencyObjectなので、添付プロパティを定義して設定することができます。

PrinterImageExtensions.SetPrinterMake(printerImage, "HP"); 
+0

これは、このような単純化された機能性のためにたくさんあるようです。これを行う他の方法を知っていますか? – Vap0r

+0

残念なことに、接続プロパティには定型コードがかなり含まれています。 xamlでプロパティを使用していない場合は、getterとsetterは厳密には必要ありません。もしそれらを取り除けば、 'printerImage.SetValue(PrinterMakeProperty、" HP ")'を呼び出して値を設定するか、 '(string)printerImage.GetValue(PrinterMakeProperty)'を呼び出して値を取得する必要があります。また、独自の静的クラスではなく、それを使用するクラスの添付プロパティを定義することもできます。 – dcstraw

+0

@HiTech:添付されたプロパティは、このタスクにはあまり適していません。付属のプロパティを使用する場合でも、プリンターの各側面ごとに1つずつ、たくさんのプロパティを作成することは望ましくありません。むしろ、特定の「PrinterInfo」タイプを保持するものを作成します。それでも、私はこの仕事に付随する財産を使うことに何の利益も見ません。時には、昔ながらのものでもうまく機能している場合でも、巧妙なテクノロジーを適用するのが少し難しい場合があります。 – AnthonyWJones

関連する問題