代码之家  ›  专栏  ›  技术社区  ›  ptoinson

具有动态高度的Silverlight

  •  5
  • ptoinson  · 技术社区  · 17 年前

    我有一个silverlight应用程序,我想允许像一个普通的HTML页面大小。也就是说,我希望silverlight插件的大小在高度上扩展和收缩,以容纳我正在填充silverlight应用程序的动态数据和控件。所以,假设我有一个带有网格和按钮的页面。用户按一下按钮,网格就会得到一堆带有图像的行,使得网格的自然大小高于浏览器窗口。我想有一些地方来调整silverlight插件的大小,以满足所需的网格大小。以下操作以及其他几次尝试均无效:

    // handler in my main page.
     void MainGrid_LayoutUpdated(object sender, EventArgs e)
     {
         HtmlPage.Window.Invoke("setSilverlightSize", this.MainGrid.DesiredSize.Height);
     }
    
    <body style="height:100%;margin:0;">
        <form id="mainForm" runat="server" style="height:100%;">
            <asp:ScriptManager ID="ScriptManager" runat="server"></asp:ScriptManager>
            <div id="SilverlightContainer"  style="height:100%;">
                <asp:Silverlight ID="SLMain" runat="server" Source="~/ClientBin/My.Silverlight.Main.xap" Version="2.0" Width="100%" Height="100%" />
            </div>
        </form>
        <script type="text/javascript">
            function setSilverlightSize(val) {
                var host = document.getElementById("SilverlightContainer");
                host.style.height = val + "px";
            }
        </script>
    </body>
    

    主网格的所需大小始终与窗口大小相同。海盗说。

    4 回复  |  直到 17 年前
        1
  •  2
  •   markti    17 年前
    1. 设置为“自动溢出”
    2. 将滚动设置为“否”

    这应该涵盖你所有的基础。下面是一些HTML示例。

    <style type="text/css"> 
    html, body { overflow:auto } 
    </style>
    <head>
        <title>My App</title>
    </head>
    <body id="bodyId" style="margin:0;" scroll="no">
        <form id="form1" runat="server">
            <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
             <div style="position: fixed; height: 100%; width: 100%">
                <avn:Silverlight 
                    ID="xamlHost" 
                    runat="server" 
                    Source="~/ClientBin/THE.xap" 
                    MinimumVersion="x.x.xxxxx" 
                    Width="100%" 
                    Height="100%" 
                    />
             </div>
        </form>
    </body>
    </html>
    
        2
  •  1
  •   staceyw    17 年前

    我用过这个,看起来效果不错。需要获得渲染“ed”大小。

    private void LayoutRoot_LayoutUpdated(object sender, System.EventArgs e)
    {
        // Set the size of the SL object to the new rendered size of the Grid.
        ResizeSilverlightOnject(this.LayoutRoot.RenderSize.Height);
    }
    
    private void ResizeSilverlightObject( double height )
    {
        HtmlPage.Window.Invoke( "ResizeObject", new object[] { height } );
    }
    
        3
  •  1
  •   zippo    14 年前

    在我的例子中,我创建一个事件,并将高度数据发送到我的浏览器,以处理来自javascript的高度值

    /*
    When Silverlight is loaded attach silverlight events
    */
    function OnSilverlightLoaded(sender, args) {
        //Getting Silverlight object on page
        _silverlightControlHost = document.getElementById("SilverlightObject");
        //Subscribe to it events
        _silverlightControlHost.Content.SilverlightApp.SetHeightEvent = SetHeightEvent;
    }
    

    这是我的Silverlight代码:

    [ScriptableType]
    public partial class MainPage
    {
        //Register the event to be as accessible from script
        [ScriptableMember]
        public event EventHandler<HeightEventHandler> SetHeightEvent;
    
        public MainPage()
        {
            InitializeComponent();
    
            //Register this instance to be accessible from script
            HtmlPage.RegisterScriptableObject("SilverlightApp", this);
        }
    
        public void SomeMethod()
        {
            if (this.SetHeightEvent != null)
                this.SetHeightEvent(this, new HeightEventHandler() { Altura = _heightSilverObj.ToString() });
        }
    }
    
    [ScriptableType]
    public class HeightEventHandler : EventArgs
    {
        public string Altura { get; set; }
    }
    

    这起作用了!

        4
  •  0
  •   AlignedDev    16 年前

    在你的第.xaml.cs页

    void Page_Loaded(object sender, RoutedEventArgs e)
    {
            SetupPage();
            this.ValidationSummary.SizeChanged += new SizeChangedEventHandler(ValidationSummary_SizeChanged);
    }
    void ValidationSummary_SizeChanged(object sender, SizeChangedEventArgs e)
        {
            if (this.OriginalPageHeight == 0.0)
            {
                this.OriginalPageHeight = this.RenderSize.Height;
            }
            else
            {
                double expandSize = this.OriginalPageHeight + e.NewSize.Height;
                ResizeSilverlightObject(expandSize);
            }
        }
    

        function ResizeObject(height) {
            var host = document.getElementById("uploaderHost");
            host.style.height = height + "px";
        }
    
    public void ResizeSilverlightObject(double height)
        {
           HtmlPage.HtmlWindow.Invoke("ResizeObject", new object[] { height });
    
        }