2012-04-22 74 views
0

好吧,這是問題。我有一個基本的網站,它有按鈕。這些按鈕通過javascript運行,然後代碼用C#執行,然後用Silverlight甘特圖控件執行各種操作。全屏Silverlight通過JavaScript

例如,如果我要縮小甘特控制我是這樣的:

<button id="zoomIn" onclick="SlZoomIn()">Zoom In</button> 

然後在javascript:

function SlZoomIn() { 
    var control = document.getElementById("SilverlightPlugIn"); 
    control.Content.SilverPlan.JsZoomIn(); 
} 

然後在C#:

[ScriptableMember] 
     public void JsZoomIn() 
     { 

      try 
      { 
       gantt.ZoomBySteps(1); 
      } 
      catch (Exception e) 
      { 
       MessageBox.Show("Zoom In does not work."); 
      } 
     } 

這所有的工作都很好,但是當我想要使用需要事件的甘特圖進行操作時,這是一個問題。例如,如果我想打印或全屏顯示我的甘特圖控制。我怎樣才能做到這一點?

在C#中的代碼,這就是:

private void fullScreen(object sender, RoutedEventArgs e) 
     { 
      Application.Current.Host.Content.IsFullScreen = !Application.Current.Host.Content.IsFullScreen; 
     } 

但是我必須在JavaScript做觸發這個方法?當用戶點擊全屏按鈕時?

回答

0

與之前的例子相比,從JavaScript調用此代碼沒有任何區別,只是Silverlight插件對多種事情(包括全屏模式,打印和文件對話框)施加了安全限制。這意味着這些操作必須由用戶點擊或輸入內容來啓動。解釋here at MSDN

因此,即使用戶按下Silverlight插件外的按鈕,用戶也不得不點擊Silverlight插件中的某個按鈕,例如一個按鈕,該按鈕會引發您在您的處理中發生的事件C#代碼,並直接採取行動。

在全屏情況下,您會發現如果您將Silverlight HTML/JavaScript內容與Silverlight混合在一起,那麼Silverlight全屏很可能根本就沒有做到您想要的 - Silverlight內容將是全屏,並且HTML內容將不可見。你也不能使用鍵盤輸入(主要是)。我建議在HTML頁面中調整Silverlight對象的大小(可能最大化瀏覽器窗口)。

+0

感謝您的答覆。我知道這是不可能的HTML全屏。這不是問題,因爲這只是一個演示。它將在未來整合到其他地方。怎麼樣「打印」或「導出」(保存文件對話框)。這可以像這樣完成,還是必須在Silverlight組件中完成?我知道有一些安全限制,但不會傷害問,如果你知道我的意思:) – Some1 2012-04-23 22:11:56

+1

再次保存文件對話框,將適用相同的限制。對於打印和打開文件,您可以在某種程度上從JavaScript執行此操作(就好像您根本不使用SL,但將數據傳遞給SL),但工作量相當大,而且效果不佳。而且我不確定是否可以從JS保存文件。 – 2012-04-24 07:23:27

+0

好的謝謝!我會把按鈕放在SL控制器上,它會工作得很好。 – Some1 2012-04-24 11:44:19