2011-07-04 158 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%",這可能是所有需要添加的修補程序。

相關問題