XAML:访问实际宽度和高度

XAML:访问实际宽度和高度,xaml,windows-runtime,windows-store-apps,winrt-xaml,Xaml,Windows Runtime,Windows Store Apps,Winrt 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=

我有一个视图框,里面有一个图像:

<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>
我得到一个错误,说参数不正确

如果我硬编码宽度,这将消失,但我希望它动态调整大小


我还尝试抓取Scenario4ImageContainer.ActualWidth,但该参数也“不正确”。

不久前,我尝试测量字符串的宽度。您可以尝试使用类似的机制来获取尺寸


似乎我已经找到了您需要处理的事件:您应该处理ImageOpened事件。这是因为图像是异步检索的,如果尝试处理任何其他事件,则很有可能没有在当时加载图像,因此每次绘制时实际大小为零,我会快速检查容器大小是否已更改(开始时初始化为0,以确保它第一次捕获)


它在大多数情况下都是有效的,但是当类被导航出并被导航回时,由于某种原因它就出现了问题。可能不相关。

您是什么时候尝试实际宽度的?控制是否已经激活并部署?宽度不正确,因为在您手动设置之前它是NaN,但实际宽度不应该是NaN。@ixSci:“控件是否已激活并布局?”嗯。。。我在构造函数中引用这些参数。当显式设置宽度和高度时,这些值将按预期显示。确定布局后,请尝试引用它。我相信加载的事件是一个很好的候选。@ixSci(2):很好的建议。我必须将它放在OnNavigatedTo()函数中,因为它在加载之前会被调用。出于某种原因,OnNavigated to中的所有维度也都是0。我试着检查Loaded中的值,但由于某些原因,我的Loaded没有被调用。。。即使我这样添加委托:“Loaded+=Scenario4\u Loaded
int w = (int)Scenario4ImageContainer.Width
this.tb.FontSize = 20;
this.tb.Measire(new Size(400, 300)); // assuming that 400x300 is max size of textblock you want
double currentWidth = this.tb.DesiredSize.Width;
double currentHeight = this.tb.DesiredSize.Height;
if (containerWidth != Output.ActualWidth - 300)
{
    Scenario4ImageContainer.Width = Output.ActualWidth - 300;
    Scenario4ImageContainer.Height = Output.ActualHeight - 20;
    containerWidth = Output.ActualWidth - 300;
}