2013-02-23 89 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事件。这是因为图像是异步检索的,如果尝试处理任何其他事件,那么很有可能在当时没有加载图像,因此实际大小为零。