用Silverlight应用程序填充浏览器窗口

用Silverlight应用程序填充浏览器窗口,silverlight,browser,size,Silverlight,Browser,Size,我想让我的Silverlight应用程序填满整个浏览器窗口。我已经将插件对象的宽度和高度设置为100%,并将LayoutRoot容器的高度和宽度设置为Auto,但仍然没有成功。有什么建议吗 <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server" /> <asp:Silverlight ID="Silverlight1" runat="

我想让我的Silverlight应用程序填满整个浏览器窗口。我已经将插件对象的宽度和高度设置为100%,并将LayoutRoot容器的高度和宽度设置为Auto,但仍然没有成功。有什么建议吗

<form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <asp:Silverlight ID="Silverlight1" runat="server" 
        Source="~/ClientBin/Client.xap"
        MinimumVersion="2.0.30818.0"
        AutoUpgrade="true"
        Height="100%" 
        Width="100%">
    </asp:Silverlight>
</form>

<UserControl 
    x:Class="Client.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Height="Auto"
    Width="Auto">
    <Grid 
        x:Name="LayoutRoot" 
        Background="#084E85"
        ShowGridLines="True">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="280" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="80" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="600" />
        </Grid.RowDefinitions>

        ...Remaining content here...
    </Grid>
</UserControl>


. 但是,正如您从我的代码中看到的,它对我不起作用。

请从中删除高度和宽度属性:

<UserControl
     x:Class="Client.Page"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">


自动调整窗口的高度和宽度以适应内容。如果删除“高度”和“宽度”属性,Silverlight应用程序将增长以适应窗口。

首先,我不在用户控件中设置高度/宽度。相反,我设置了设计高度和设计宽度(在“
http://schemas.microsoft.com/expression/blend/2008
“命名空间”),我将对齐设置为拉伸

<UserControl ... 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
    d:DesignHeight="1050" d:DesignWidth="1680">

在我的HTML中,我将高度和宽度设置为100%,如下所示

<div style="height: 100%; width: 100%; position: fixed;">
        <asp:Silverlight runat="server" Source="~/ClientBin/My.xap" ID="MyId" 
            Width="100%" Height="100%" />
</div>

在这一点上,一切对我来说都起作用,让它占据整个窗口。

我认为您的网格设置为尽可能小(没有“星形”列或行)。 你能再尝试一列和一行的“星形”大小吗

正如其他人指出的,您还需要删除“自动”大小,因为它们会根据内容自动调整大小


还可以尝试在页面上设置背景色,以便查看其实际扩展的位置。

如果您的HTML布局相当复杂,无法依赖固定位置,则可以使用以下方法调整#silverlightControlHost div的大小:

private bool _hasResized;

protected override Size ArrangeOverride(Size finalSize)
{
    if (!_hasResized)
    {
        HtmlPage.Document.GetElementById("silverlightControlHost").SetStyleAttribute("height", finalSize.Height.ToString());
        _hasResized = true;
    }

    return base.ArrangeOverride(finalSize);
}
您可以将其放在
MainPage.cs
中,或者如果您有嵌套的
UserControls
,则需要最大高度的控件。我还使用了以下XAML和VisualStudio提供的默认HTML

<UserControl ...
    VerticalAlignment="Stretch"
    Height="Auto"
    Width="Auto">


如果没有这些设置,我还没有测试过它,据我所知,自动是默认设置。

如果完全删除高度和宽度,它将无法在设计器中正确渲染。。。请参阅DesignHeight和DesignWidth我要添加的一件事(这是我好不容易才发现的):如果您在其他控件中托管控件,并且希望托管控件填充整个屏幕,则应该使用网格而不是画布作为托管控件的布局根。画布仅支持绝对布局,因此会忽略任何HorizontalAlignment=“Stretch”或VerticalAlignment=“Stretch”属性。因此,如果您使用画布作为宿主控件,则宿主控件的大小将始终调整为支持其包含的所有元素所需的最小大小。不幸的是,如果您有另一个div或复杂的设计,则此操作不起作用,除非我遗漏了一些内容。+1刚刚搜索了此问题,此解决方案非常有效!