14 Stimmen

Füllen des Browser-Fensters mit Silverlight-Anwendung

Ich möchte, dass meine Silverlight-Anwendung das gesamte Browserfenster ausfüllt. Ich habe die Breite und Höhe des Plugin-Objekts auf 100 % gesetzt und die Höhe und Breite meines LayoutRoot-Containers auf Auto gesetzt, aber immer noch kein Glück. Irgendwelche Vorschläge?

<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>

Haftungsausschluss: Ich suchte zuerst nach einer Antwort und fand dieses Thema . Wie Sie jedoch an meinem Code sehen können, funktioniert das bei mir nicht.

18voto

Brian Genisio Punkte 47135

Erstens lege ich die Höhe/Breite nicht in der Benutzersteuerung fest. Stattdessen setze ich die DesignHeight und DesignWidth (in der " http://schemas.microsoft.com/expression/blend/2008 Namespace") und ich habe die Ausrichtung auf "Stretch" gesetzt

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

In meinem HTML-Code setze ich die Höhe und Breite auf 100% wie folgt...

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

Zu diesem Zeitpunkt funktioniert bei mir alles so, dass ich das gesamte Fenster einnehmen kann.

0 Stimmen

Eine Sache, die ich hinzufügen würde (die ich auf die harte Tour herausgefunden habe): Wenn Sie Steuerelemente innerhalb anderer Steuerelemente hosten, und Sie möchten, dass das gehostete Steuerelement den gesamten Bildschirm ausfüllt, sollten Sie ein Grid und nicht ein Canvas als LayoutRoot für das Host-Steuerelement verwenden. Ein Canvas unterstützt nur absolutes Layout und ignoriert folglich alle HorizontalAlignment="Stretch" oder VerticalAlignment="Stretch" Attribute. Wenn Sie also ein Canvas für Ihr Hosting-Steuerelement verwenden, wird das gehostete Steuerelement immer auf die Mindestgröße skaliert, die erforderlich ist, um alle darin enthaltenen Elemente zu unterstützen.

0 Stimmen

Leider funktioniert dies nicht, wenn Sie Ihr <div> innerhalb eines anderen div oder eines komplexen Designs haben, es sei denn, ich übersehe etwas.

0 Stimmen

+1 Ich habe gerade nach diesem Problem gesucht und diese Lösung funktioniert perfekt!

0voto

Justin Niessner Punkte 235353

Entfernen Sie die Attribute Höhe und Breite aus der Datei :

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

Automatische Höhe und Breite mit Anpassung der Fenstergröße an den Inhalt. Wenn Sie die Attribute Höhe und Breite entfernen, wird Ihre Silverlight-Anwendung an das Fenster angepasst.

0 Stimmen

Wenn Sie die Höhe und Breite komplett entfernen, wird es im Designer nicht richtig dargestellt... siehe DesignHeight und DesignWidth

0voto

Denis Troller Punkte 7331

Hmm

Ich denke, Ihr Raster ist so eingerichtet, dass es so klein wie möglich ist (keine "Stern"-Spalte oder -Zeile). Können Sie es mit einer weiteren Spalte und Zeile mit einer "Stern"-Größe versuchen?

Wie bereits von anderen erwähnt, müssen Sie auch die "Auto"-Größen entfernen, da sie sich automatisch an den Inhalt anpassen.

Versuchen Sie auch, eine Hintergrundfarbe auf der Seite einzustellen, damit Sie sehen, wo sie sich tatsächlich erstreckt.

0voto

Chris S Punkte 63542

Wenn Sie ein komplexes HTML-Layout haben und sich nicht auf eine feste Positionierung verlassen können, können Sie die Größe des #silverlightControlHost div wie folgt ändern:

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);
}

Sie können das hier hineinlegen MainPage.cs oder wenn Sie verschachtelt haben UserControls dann die Kontrolle, die die größte Höhe erfordert. Ich verwende auch die folgenden XAML und die Standard-HTML Visual Studio bietet

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

Ich habe es nicht ohne diese Einstellungen getestet, soweit ich weiß, ist Auto die Standardeinstellung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X