2010-04-08 96 views
2

裝我要帶一旦圖像加載,這裏的快照是一個代碼段:如何檢查如果圖像在Silverlight

imageBrush.ImageOpened + =(發件人,E) = > { doSomething(); };

這個代碼片段的一個問題是,如果圖像刷已經加載,事件不會被解僱,所以我需要一種方法來驗證圖像已經加載,但似乎沒有「IsLoaded 「在silverlight的財產。你能提出一個簡單的解決方法嗎?

+0

檢查實際高度或寬度是否不同? – 2010-04-08 06:38:29

+0

你能解釋你如何使用'ImageBrush'拍攝快照嗎?你爲什麼不使用'Image'控件?我相信傑夫在他的評論中提到了「圖片」控件。假設您沒有自己設置,圖像控件Width屬性將保持爲0,直到源完全加載。 – AnthonyWJones 2010-04-08 06:57:34

回答

0

您可以檢查Image控件的Width屬性是否爲非零來測試其加載。

這可能是因此,你也可以使用BitmapSourcePixelWidth屬性來執行相同的測試: -

bool isLoaded = ((BitmapSource)ImageBrush.ImageSource).PixelWidth == 0; 

我沒有這個測試自己,但它似乎是合乎邏輯。

+0

感謝您的回覆,但我還有一個問題,我想知道您是否可以幫助我解決這個問題。 接收到來自服務器的畫布,並通過搜索路徑從畫布中提取圖像畫筆。 綜上所述,Canvas - > Path - > Path.Fill - > ImageBrush。 現在,我想用WriteableBitmap的加載時採取圖像刷的快照,並在這裏是我做過什麼 – umlgorithm 2010-04-08 13:13:14

+0

VAR imageBrushes = VisualTreeUtility.FindVisualChildren (畫布) 。凡(I => i.Fill.GetType() == typeof(ImageBrush)) .Select(p => p.Fill); foreach(var image in imageBrushes) { image.ImageOpened + = delegate {//永遠不會到達這裏! }; 如果(image.isLoaded()){ // 我做基於您的代碼段 延伸//它送過來,當它具有非零寬度 }} – umlgorithm 2010-04-08 13:14:31

+1

@umlgorithm:這將是非常非常好因爲你可以發佈另一個問題,而不是嘗試在回答中擠壓註釋和其他問題,因爲你可以看到代碼在評論中格式不是很好。評論實際上是用於討論具體的答案或問題,或者是針對澄清答案的小問題。 – AnthonyWJones 2010-04-08 14:36:26