2013-02-23 131 views
1

我有內部的圖像視框:XAML:訪問實際寬度和高度

<Viewbox MaxHeight="100" MaxWidth="100" x:Name="Scenario4ImageContainer2" Stretch="Uniform" Grid.Column="1" Grid.Row="1"> 
    <Image x:Name="Scenario4Image" PointerPressed="Scenario4Image_PointerPressed" HorizontalAlignment="Stretch" /> 
</Viewbox> 

我希望能夠抓住的實際寬度/高度值,但是當我嘗試這在後端C#:

int w = (int)Scenario4ImageContainer.Width 

我收到一個錯誤,提示參數不正確。

這會消失,如果我硬編碼寬度,但我希望它動態調整大小。

我也試過抓住Scenario4ImageContainer.ActualWidth,但是這個參數也是「不正確」的。

+1

你什麼時候試過ActualWidth?控制是否已經激活並且已經佈置?寬度不正確,因爲它是NaN,直到您手動設置它,但是ActualWidth不應該是NaN。 – ixSci 2013-02-25 14:48:39

+0

@ixSci:「控制是否已經激活並且佈置?嗯......我在構造函數中引用這些參數。當明確設置寬度和高度時,數值按預期顯示。 – micahhoover 2013-02-27 03:57:43

+2

嘗試引用它,當它被確定下來。我相信**加載**事件是一個很好的候選人。 – ixSci 2013-02-27 04:11:25

回答

0

在每次繪製時,我都會快速檢查容器大小已經改變(初始時爲0,以確保它第一次捕獲)。

if (containerWidth != Output.ActualWidth - 300) 
{ 
    Scenario4ImageContainer.Width = Output.ActualWidth - 300; 
    Scenario4ImageContainer.Height = Output.ActualHeight - 20; 
    containerWidth = Output.ActualWidth - 300; 
} 

它的工作原理在大多數情況下,但是當類被導航並導航回到它有某種原因的問題。可能無關。

1

好像我找到了你需要處理的事件:你應該處理ImageOpened事件。這是因爲圖像是異步檢索的,如果嘗試處理任何其他事件,那麼很有可能在當時沒有加載圖像,因此實際大小爲零。