2011-07-04 113 views
0

在Silverlight上尝试一些东西时,我遇到了布局问题,即它无法像普通网页一样根据页面内容进行扩展。如何根据Silverlight页面的内容调整layoutRoot的大小?

无论我尝试什么,我都无法解决这个问题。 (我试图打开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> 

任何帮助或建议,可以理解的?

+0

确保在粘贴到StackOverflow时从Xaml中删除空白行。然后代码块将正确显示。我已经为你解决了上述问题。 –

回答

1

可以调整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 ID是老派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

嗨HiTech,我做了你说的,但它给了我错误,名为“访问DOM元素被禁用”,即使我设置在Silverlight对象中enablehtmlaccess True的值。 – ibrahimyilmaz

+0

@ibrahimyilmaz:如果我有时间,我会在Silverlight 4应用程序中尝试它,并在今晚发布更新的版本。 –

0

正如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%",这可能是所有需要添加的修补程序。

相关问题