2009-11-04 93 views
0

我有一個出現在另一個頂部的Silverlight控件(圖片彈出框)。在這個彈出控件中,我有一個帶有堆棧面板(實例名稱= spMain,orientation = vertical)的scrollview(height = 250)。在堆棧面板的內容中有幾個文本框堆疊在一起。當我從文本框標籤到文本框時,scrollviewer會自動向底部移動(我在事件處理程序中編寫了代碼,所有文本框都鏈接到了這個)。關閉彈出框時超出範圍錯誤

我遇到的問題是當我試圖關閉彈出控件時,我收到一個錯誤,指出該值不在預期的範圍內。

 if (sender is TextBox) 
     { 
      TextBox tb = (TextBox)sender; 

      try 
      { 
       // Code bombs out here when I attempt to close out the pop-up control 
       Point pt = tb.TransformToVisual(spMain).Transform(new Point()); 

       if (pt.Y >= scrollViewerHeight - tb.ActualHeight) 
       { 
        svMain.UpdateLayout(); 
        svMain.ScrollToVerticalOffset(scrollViewerHeight += pt.Y); 
       } 
      } 
      catch (ArgumentException aex) 
      { 
       // Don't want to eat the exception 
       string errorMessage = aex.Message; 
       System.Diagnostics.Debug.WriteLine(errorMessage); 
      } 
     } 

我並不感到驚訝,我發現了錯誤,因爲它似乎有道理,但我正在尋找的是某種類型的用戶控制卸載事件或防止問題的代碼的執行。

有沒有人有關於如何去做這件事的任何想法?

+0

爲什麼上面的代碼在關閉彈出窗口時觸發? – Bryant 2009-11-04 20:53:01

回答

1

我認爲問題在於如何關閉彈出窗口。你是從可視化樹中刪除它還是將其可見性設置爲摺疊?

如果(正如我認爲您的問題所暗示的那樣)您完全從可視化樹中刪除它,您可能能夠通過先摺疊文本框的可見性,然後刪除該控件來解決即時問題。這假定您的代碼被稱爲文本框的調整大小(或可能調整大小)的結果。或者,您也可以先刪除內容,然後再刪除它們。

至於Unloaded事件,框架中沒有任何東西會爲你做。您可以輕鬆地爲自己的控件編寫自定義的卸載方法,只需在要刪除它時使用它。