2011-07-08 20 views
1

我正在讀取數據並將其輸出到交互式打印機映射中。打印機定位數據包含打印機的x座標,y座標,品牌,型號和IP。我使用這些數據創建一個圖像並定位它。問題在於,我試圖找出將圖像,模型和IP綁定到圖像的方法,以便在將來與其進行交互時可以輕鬆讀取它。例如,這樣的事情會很好: printerImage.Attribute("Make", "HP"); 這是可能的/明智的嗎?將數據添加到silverlight中的元素

回答

2

自己創建類,如果你還沒有這樣做的話那有你需要的所有屬性,您的數據源可能已經提供這樣的目的。

全部FrameworkElements包括Image有一個Tag屬性用於您的確切原因。

printerImage.Tag = instanceOfYourPrinterInfoClass; 

然後,您可以retreive你需要的信息: -

YourPrinterInfoClass info = printerImage.Tag as YourPrinterInfoClass; 

編輯

如此說來可能比Tag一個更好的地方分配的對象是DataContext。例如,您可以添加一個Tooltip,當鼠標懸停在圖像上時呈現這些細節。

1

我認爲你使用的是System.Windows.Controls.Image,對嗎?在這種情況下,這是一個DependencyObject,所以你可以定義和設置附加屬性。

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); 
    } 

    // ... 
} 

然後使用附加屬性是這樣的:

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

對於這樣簡單的功能來說,這看起來很多。你知道任何其他方式來做到這一點嗎? – Vap0r

+0

不幸的是,附加屬性確實帶有相當多的樣板代碼。如果您沒有使用xaml中的屬性,則getter和setter不是嚴格要求的。如果你擺脫了它們,你需要調用'printerImage.SetValue(PrinterMakeProperty,「HP」)'來設置值,或者'(string)printerImage.GetValue(PrinterMakeProperty)'來獲取值。你也可以在使用它的類中定義附加的屬性,而不是在它自己的靜態類中。 – dcstraw

+0

@HiTech:附加屬性根本不適合完成這項任務。即使使用了附加屬性,我們也不希望爲它們創建過多的屬性,對於打印機的每個方面都有一個屬性。相反,我們會創建一個持有特定「PrinterInfo」類型的類型。即使這樣,我看到使用附加的財產這項工作沒有任何好處。有時候我們可以稍微運用一些聰明的技術,即使這些老式的技術也可以工作,甚至更好。 – AnthonyWJones