Как изменить размер layoutRoot в соответствии с содержимым страницы в Silverlight? - PullRequest
0 голосов
/ 05 июля 2011

Пробуя что-то на silverlight, я столкнулся с проблемой макета, которая заключается в том, что его нельзя расширить в зависимости от содержимого страницы, как обычная веб-страница.

Что бы я ни пытался, я не могу решить эту проблему. (Я пытался открыть ScrollBars, назначая статическую высоту и ширину и т. Д.). Мой файл .xaml находится здесь:

<UserControl
    x:Class="XXXSL.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d"
    d:DesignWidth="640" d:DesignHeight="300">
    <Border Style="{StaticResource ContentBorderStyle}">
        <Grid x:Name="LayoutRoot" Style="{StaticResource LayoutRootGridStyle}" >
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Border x:Name="BrandingBorder" Style="{StaticResource NavBrandingBorderStyle}">
                <StackPanel x:Name="BrandingStackPanel" Style="{StaticResource BrandingStackPanelStyle}" >
                    <ContentControl Style="{StaticResource LogoIcon}" />
                    <TextBlock x:Name="ApplicationNameTextBlock" Style="{StaticResource ApplicationNameStyle}" Text="Metropoll Emlak Sistemi" />
                </StackPanel>
            </Border>
            <Border x:Name="LinksBorder" Style="{StaticResource NavLinksBorderStyle}">
                <StackPanel x:Name="LinksStackPanel" Style="{StaticResource LinksStackPanelStyle}">
                    <HyperlinkButton Style="{StaticResource LinkStyle}" NavigateUri="Home" TargetName="ContentFrame" Content="..." />
                    <HyperlinkButton Style="{StaticResource LinkStyle}" NavigateUri="XXX" TargetName="ContentFrame" Content="...." />
                    <HyperlinkButton Style="{StaticResource LinkStyle}" NavigateUri="YYY" TargetName="ContentFrame" Content="..." />
                    <HyperlinkButton Style="{StaticResource LinkStyle}" NavigateUri="About" TargetName="ContentFrame" Content="..." />
                </StackPanel>
            </Border>
            <Border x:Name="ContentBorder" Style="{StaticResource NavContentBorderStyle}" Margin="45,-4,0,-38" Grid.Row="2">
                <StackPanel Style="{StaticResource LinksStackPanelStyle}">
                <navigation:Frame x:Name="ContentFrame" Style="{StaticResource NavContentFrameStyle}" Navigated="ContentFrame_Navigated" NavigationFailed="ContentFrame_NavigationFailed" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Visible" UseLayoutRounding="False" />
                </StackPanel>
            </Border>
        </Grid>
    </Border>
</UserControl>

любая помощь или предложение будет оценено?

Ответы [ 2 ]

1 голос
/ 05 июля 2011

Можно изменить размер хост-объекта Silverlight в соответствии с элементом содержимого верхнего уровня.Silverlight просто вызывает метод Javascript для изменения размера контейнера на основе изменения размера корневого элемента.

Таким образом, полосы прокрутки браузера включаются вместо того, чтобы требовать полосы прокрутки Silverlight.Это также означает, что страница Silverlight всегда "полноразмерная", насколько это возможно.

Принимая во внимание, что этот код взят из моего Silverlight 2 дня (очень старый), концепция не изменилась.

На странице aspx хостинга у меня есть эта функция Javascript:

<script language="javascript" type="text/javascript">
    function ResizeObject(height) {
        var host = document.getElementById("Xaml1");
        host.style.height = height + "px";
    }    
</script>

Идентификатор Xaml1 был объектом asp:Silverlight старой школы, поэтому вам может потребоваться изменить цель.

В конструкторе корневой страницы я добавил обработчик изменения размера:

LayoutRoot.SizeChanged += new SizeChangedEventHandler(LayoutRoot_SizeChanged);

Который вызывал следующий обработчик событий и вспомогательный метод (в то время в моем приложении меня интересовала только высота):

void LayoutRoot_SizeChanged(object sender, SizeChangedEventArgs e)
{
    ResizeSilverlightObject(e.NewSize.Height);
}

private void ResizeSilverlightObject(double height)
{
    // Now resize the actual Silverlight container to match the layout size
    HtmlPage.Window.Invoke("ResizeObject", new object[] { height });
}
0 голосов
/ 07 июля 2011

Как указала HiTech Magic, проблема требует некоторой работы на странице, на которой размещено ваше приложение Silverlight.

Найдите этот тег в html на странице хостинга.

<form id="form1" runat="server" style="height:100%">
<div id="silverlightControlHost">
    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">

Еслион не содержит width="100%" height="100%", это может быть все, что нужно добавить для исправления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...