我有一个Silverlight控件出现在另一个上面(图片弹出框)。在这个弹出控件中,我有一个scrollview(height = 250),里面有一个堆栈面板(实例名称= spMain,orientation = vertical)。在堆栈面板的内容中,几个文本框堆叠在彼此之上。当我从文本框切换到文本框时,滚动查看器会自动向底部移动(我在事件处理程序中编写代码,所有文本框都链接到那个)。
我遇到的问题是当我尝试关闭弹出控件时,我收到一条错误,指出该值不在预期范围内。
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);
}
}
我收到错误并不感到惊讶,因为它似乎有意义,但我正在寻找的是某种User Control Unloaded事件或防止违规代码执行。
有没有人对如何解决这个问题有任何想法?
答案 0 :(得分:1)
我认为问题在于你如何关闭弹出窗口。您是从视觉树中删除它还是仅将其可见性设置为折叠?
如果(我认为你的问题建议)你将它从视觉树中完全删除,你可以通过首先折叠文本框的可见性然后删除控件来解决当前问题。这假设您的代码是由文本框的大小调整(或可能调整大小)调用的。或者,您也可以在删除内容之前清空它们。
对于Unloaded事件,框架中没有任何内容可以帮助您。您可以轻松地为您的控件编写自定义卸载方法,并在您想要删除它时使用它。