2010年5月19日

Embed HTML in Silverlight

最近處理 Silverlight 顯示 HTML 視窗的問題,
看到一篇文章,測試了五種不同的方法,
分別如下:
  1. WebBrowser - 可以顯示, 但限定在 Out of Browser 的模式
  2. RichTextBox - 無法顯示 HTML
  3. HTML Host Control - 即在 Silverlight 上, 疊一個 position:absolute 的區塊或 ifarem
  4. Liquid RichTextBox - 勉強可以, 有些 HTML 的語法無法呈現, 對中文的支援更糟
  5. HtmlTextBox - 同樣是勉強可用

原始文章位置:http://www.cnblogs.com/Robin2005/archive/2010/05/18/1737887.html
其中 HTML Host Control 應該是相容性最不受限的方法,
但嚴格來說,這不能算是 Silverlight 所提供的功能。

下列class,可以輸入InnerHtml,來顯示 HTML 的內容
但記得在包含 Silverlight 的網頁上,加入 id 為 winContent 的 div
並將 Silverlight 物件設為 windowless。
    public partial class HtmlHostControl : UserControl
    {
        public string InnerHtml
        {
            get { return m_InnerHtml; }
            set
            {
                m_InnerHtml = value;
                if (m_DivIFrameHost != null)
                    m_DivIFrameHost.SetProperty("innerHTML", value);
            }
        }

        public HtmlHostControl()
        {
            InitializeComponent();
            SizeChanged += new SizeChangedEventHandler(HtmlHostControl_SizeChanged);
            CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
        }

        void CompositionTarget_Rendering(object sender, EventArgs e)
        {
            ResetHtmlHostPosition();
        }

        void HtmlHostControl_SizeChanged(object sender, SizeChangedEventArgs e)
        {
            ResetHtmlHostPosition();
        }

        HtmlElement m_DivIFrameHost = null;
        string m_InnerHtml = "";

        public void Show()
        {
            if (m_DivIFrameHost == null)
            {
                HtmlDocument doc = HtmlPage.Document;
                m_DivIFrameHost = doc.GetElementById("winContent"); 
                m_DivIFrameHost.SetStyleAttribute("visibility", "visible");

                m_DivIFrameHost.SetProperty("innerHTML", "Hello");
            }

            ResetHtmlHostPosition();
        }

        private void ResetHtmlHostPosition()
        {
            if (m_DivIFrameHost != null)
            {
                GeneralTransform generalTransform = HtmlHostPanel.TransformToVisual(Application.Current.RootVisual);

                Point pos1 = generalTransform.Transform(new Point(0, 0));
                Point pos2 = generalTransform.Transform(new Point(HtmlHostPanel.ActualWidth, HtmlHostPanel.ActualHeight));

                m_DivIFrameHost.SetStyleAttribute("left", pos1.X.ToString() + "px");
                m_DivIFrameHost.SetStyleAttribute("top", pos1.Y.ToString() + "px");
                m_DivIFrameHost.SetStyleAttribute("width", (pos2.X - pos1.X).ToString() + "px");
                m_DivIFrameHost.SetStyleAttribute("height", (pos2.Y - pos1.Y).ToString() + "px");
            }
        }

        public void ReleaseAll()
        {
            CompositionTarget.Rendering -= CompositionTarget_Rendering;
            if (m_DivIFrameHost != null)
                m_DivIFrameHost.SetStyleAttribute("visibility", "hidden");
        }
    }

2010年4月29日

Silverlight AP 之 1 - 奇蜜相簿瀏覽工具

經過一段時間的開發,慢慢在奇蜜親子網增添了一些以 Silverlight 所開發的功能與服務。

由於網站原本就提供相簿服務,因此第一個便想到利用 Silverlight 的互動威力, 來達成更好的瀏覽經驗。不同於一般網站,奇蜜親子網的相簿,分成了三層結構; 最上層是分類,然後相簿,最後是相片。為了配合這個特殊結構,瀏覽介面做了 特別的設計。

訪客可以點選 這裡 連結到下面截圖的實際位置,也請不吝於提供意見與指教。

2009年11月19日

Silverlight 4


"你認為該有的,過去卻沒有的,現在都有了, 列印, 滑鼠右鍵, WebCam,
拖曳檔案, 驗證與安全性, RichtextBox, 剪貼簿, 輸入法支援..."
以上是由董大偉部落格所擷取的一段話。

Silverlight 的版本更新真的有夠快,
年中才剛由 2.0 改為 3.0,看來最近又要再改了。

[Reference]
Silverlight 4 beta 登場 : 此時無聲勝有聲, 一切盡在不言中...

2009年11月14日

Bing Maps Silverlight Control SDK


先是 Bing, 現在又有 Bing Maps,
實在很難對 Microsoft 這個龍頭批評什麼!

Bing Maps 看起來離 Google Maps 還有一段不小的距離,
也還沒有中文化,不知道台灣會不會有人想去用他的SDK?
總之, 只是看到消息, 順手記錄下來罷了!

[Reference]
Bing Maps Silverlight Control SDK

2009年11月11日

Silverlight Unloaded Event & ZIndex


Silverlight 有一個問題,就是沒有提供 Unloaded Event,
如果你設計了一個 UserControl 並在 Loaded 中加入了 event
那麼這個 UserControl 若移出 Parent 後再加入,
就會再呼叫一次 Loaded,而 event 便再增加一次。

因此,圖形物件的 layer 在進行變更時,
要記得利用 Canvas.SetZIndex 來處理,
而不要用 Panel.Children.Remove() 及 Panel.Children.Add().

2009年11月2日

Rich Internet Application Market Share


因為訂閱了 Google Blog 有關 Silverlight 的快訊,
收到了 Kimo Chung's AS3 Playground: Why Silverlight? um, I don't know.
這篇文章,
也因此發現了有關 RIA 市場占有率的現況,
提供大家分享。

Silverlight 全世界的安裝比例,大約為 29%,
台灣的安裝比列則是41%。



[Reference]
Rich Internet Application Statistics
Rich Internet Application Market Share

Deploying Vue & .NET with Google OAuth on GCP Cloud Run

Deploying Vue & .NET with Google OAuth on GCP Cloud Run Deploying Vue & .NET with Google OAuth on GCP Cloud Run...