XAML:访问实际的宽度和高度

时间:2013-02-23 13:14:40

标签: 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="Stretch"  />
</Viewbox>

我希望能够获取实际的宽度/高度值,但是当我在后端C#中尝试这个时:

int w = (int)Scenario4ImageContainer.Width

我收到错误消息,说参数不正确。

如果我对宽度进行硬编码,则会消失,但我希望它能够动态调整大小。

我也试过抓住Scenario4ImageContainer.ActualWidth,但这个参数也是“不正确的”。

3 个答案:

答案 0 :(得分:1)

前段时间我试图测量一个字符串的宽度。您可以尝试使用类似的机制来获取尺寸。

http://invokeit.wordpress.com/2012/09/19/how-to-measure-rendered-string-dimensions-in-win8dev/

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;

答案 1 :(得分:1)

好像我发现了你需要处理的事件:你应该处理 ImageOpened 事件。这是因为图像是异步检索的,如果尝试处理任何其他事件,那么很有可能在那时没有加载图像,所以实际大小为零

答案 2 :(得分:0)

在每次抽奖时,我会快速检查一下容器大小是否已经改变(开始时初始化为0,以确保它第一次捕获)。

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

它在很大程度上起作用,但是当类被导航并导航回来时,由于某种原因它会出现问题。可能不相关。