如何为silverlight页面启用自动滚动

时间:2010-09-22 03:34:39

标签: html css wpf silverlight silverlight-4.0

有一个Silverlight页面,它的宽度为810像素,未指定高度:

<NavigationControls:Page x:Class="VfmElitaSilverlightClientView.Pages.SquadView" 
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
       xmlns:NavigationControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
       xmlns:DataControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
       xmlns:InputControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input"
       xmlns:ToolkitControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit" 
       xmlns:Pages="clr-namespace:VfmElitaSilverlightClientView.Pages" 
       xmlns:Controls="clr-namespace:VfmElitaSilverlightClientView.Controls"
       xmlns:Converter="clr-namespace:SilverlightCommonView.Converter;assembly=SilverlightCommonView" 
       mc:Ignorable="d" Width="810"
       Title="SquadView Page">
<NavigationControls:Page.Resources>
    <Converter:BooleanToVisibilityConverter x:Key="resourceBooleanToVisibilityConverter" />
    <Converter:BooleanToVisibilityInvertedConverter x:Key="resourceBooleanToVisibilityInvertedConverter" />
</NavigationControls:Page.Resources>
<ToolkitControls:BusyIndicator IsBusy="{Binding IsBusy}" DisplayAfter="0" BusyContent="{Binding BusyContent}">
    <StackPanel Background="Transparent" HorizontalAlignment="Stretch">

        <StackPanel ... ></StackPanel>
        <StackPanel ... ></StackPanel>
        <StackPanel ... ></StackPanel>

        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">

            <Grid Margin="5" Width="500">...</Grid>

            <Canvas Height="180" Width="210">...</Canvas>

        <DataControls:DataGrid
                   IsReadOnly="True" HorizontalAlignment="Stretch" Margin="5" MinHeight="60" MaxHeight="460"
                   HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Auto"
                   RowHeight="18" VerticalAlignment="Top"
                   >
        </DataControls:DataGrid>

        <Button Content="Save" HorizontalAlignment="Center"
                Padding="10" Command="{Binding SaveButtonClickCommand,Mode=OneWay}"/>

    </StackPanel>
</ToolkitControls:BusyIndicator>

页面显示以下html代码:

<div id="silverlightControlHost" style="height:<%=Height%>px;margin: auto;">
    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
      <param name="source" value="/ClientBin/app.xap"/>
      <param name="onError" value="onSilverlightError" />
      <param name="background" value="transparent" />
          <param name="windowless" value="true" />
      <param name="initParams" value="<%=InitParams %>" /> 
      <param name="minRuntimeVersion" value="3.0.40624.0" />
      <param name="autoUpgrade" value="true" />
      <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration:none">
          <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none"/>
      </a>
    </object>
    <iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe>
</div>

在其他控件中,页面内部有一个网格,网格行数取决于数据(从17到25-28),网格行高度为22像素。必须在不滚动的情况下显示所有控件和所有网格行。

对于我的示例,页面的“高度”属性值设置为“930”。对于拥有大量数据(数据网格中有25-28行)的用户,大多数页面都忙于处理数据。但是其他用户(18-20行)看到了大的“空”空间,这是留作控制的。

我试图降低主持Silverlight应用程序的DIV的高度 - 这会切断对“大数据”案例的控制。尝试将样式“高度”设置为“自动”会导致空HTML页面(根本看不到Silverlight控件)。

请问您如何设置页面高度以便自动拉伸以适应整个控件?

我不确定这是Silverlight问题还是HTML ...

谢谢!

1 个答案:

答案 0 :(得分:0)

最好先将HTML Silverlight大小调整问题与所有其他布局问题分开。

除非为其他HTML元素预留空间,否则您的Silverlight对象占用浏览器高度和宽度的100%。这样,所有布局和间距都受Silverlight对象的控制。

只有当您希望Silverlight对象大于浏览器并使用浏览器滚动条(不推荐)时,才会执行此操作。如果您使Silverlight对象小于浏览器,则会丢失浏览器未使用区域上的任何鼠标交互,否则您可能会执行某些操作。再次100%是最容易使用的。

请更多信息:

除了HTML之外,你能提供更多的XAML(截图或简单的模型在Paint中很棒),所以我可以让你知道你需要什么类型的布局和间距你的特定屏幕?