如果XAML网格行/列为*"E;”如何以编程方式获取可用区域?

如果XAML网格行/列为*"E;”如何以编程方式获取可用区域?,xaml,visual-studio-2013,windows-runtime,grid,winrt-xaml,Xaml,Visual Studio 2013,Windows Runtime,Grid,Winrt Xaml,下面我有一些相当原始的代码(仅测试,试图证明这一点)。我有一个网格行和网格列,它们的宽度和高度分别定义为“*”,这样它们就用完了其他行/列没有使用的所有可用空间。相当标准,或者我是这么想的 <Grid x:Name="PageContent" Background="{Binding PageColor}"> <Grid.RowDefinitions> <RowDefinition Height="81" /> <

下面我有一些相当原始的代码(仅测试,试图证明这一点)。我有一个网格行和网格列,它们的宽度和高度分别定义为“*”,这样它们就用完了其他行/列没有使用的所有可用空间。相当标准,或者我是这么想的

<Grid x:Name="PageContent" Background="{Binding PageColor}">
    <Grid.RowDefinitions>
        <RowDefinition Height="81" />
        <RowDefinition Height="*" />
        <RowDefinition Height="92" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>

    <Button x:Name="backButton" Grid.Row="0" Grid.Column="0" Click="GoBack" IsEnabled="{Binding Frame.CanGoBack, ElementName=pageRoot}" Style="{StaticResource TopBackButtonStyle}" />
    <Button x:Name="searchButton" Grid.Row="0" Grid.Column="2" Click="GoSearch" Style="{StaticResource TopSearchButtonStyle}" HorizontalAlignment="Right"/>
    <Button x:Name="settingsButton" Grid.Row="0" Grid.Column="3" Click="GoSettings" Style="{StaticResource TopSettingsButtonStyle}" HorizontalAlignment="Right"/>

    <ScrollViewer Grid.Row="1" Grid.ColumnSpan="4" Name="MainScrollViewer" ZoomMode="Disabled" IsTabStop="False" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Padding="0,0,0,20" >
        <Image x:Name="PDFRenderedImage" AutomationProperties.Name="placeholder image" Source="Assets/placeholder-sdk.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="10,10,10,10"/>
    </ScrollViewer>

现在,我正在尝试使用微软为示例定义的一些更便宜的PDF显示例程。其中之一是将RenderToStreamAsync与PdfPagerEndropions一起使用

我想做的一件事是尝试缩放PDF合成图像,以便无论发生什么情况,页面都适合屏幕。但是,要做到这一点,至少在pdfpagerenderropions中,意味着我需要提前知道宽度/高度

因此,在使用元素之前,如何通过编程获得定义为“*”的原始/列中的UIElement的宽度和高度(这意味着,即使尚未使用该大小,我如何获得可用区域大小)


有人认为有更好的方法吗?

如果您的区域未被使用,您可以随时设置MinHight和MinWidth。这样,它将默认为最小高度和最小宽度,并且仍然能够相应地展开/收缩


希望这有帮助:)

在ScrollViewer中添加一个名称,然后在代码中获取它的Widt/Height属性

在Page.xaml中

<ScrollViewer x:Name="MyScrollViewer">
    <Image.../>
</ScrollViewer>

UIElement.ActualWeight和ActualWeight是我想要的。但仍然没有完全恢复

我最后做的是一团糟,我不喜欢。我所做的是渲染PDF并将其显示为图像。然后读取实际高度和实际宽度,并使用所使用的(可视)尺寸重新渲染整个对象


它有效,看起来很重,但确实有效。

只需为特定行/列指定一个
x:Name
,然后分别查询它们的
实际高度和
实际宽度。(如果您确实想确保在渲染阶段之后发生这种情况,请通过
Dispatcher执行所有操作。使用低优先级设置调用

事实上,这仍然不起作用。这给出了仅用于原型制作的图像的实际高度和宽度。在本例中,scrollviewer显示的高度为NaN,实际高度为0。所以这两个看起来都像半身像。
public void LoadPDF()
{
    var height = MyScrollViewer.Height;
    //do something with it
}