我在将数据绑定到其他人的自定义控件值时遇到了一些困难,所以我使用“Loaded”事件来分配控件的值,但我注意到这个事件被激发了两次。
我怎样才能知道发生什么事情? (VS2008)或者可能会有任何解决方案:)
答案 0 :(得分:4)
每次控件变得可见时,您的Loaded事件将会激活(基本上)两次。例如,每次切换到其选项卡时,选项卡控件上的控件都将触发其Loaded事件。
这是一个简单的解决方案:
bool m_Loaded = false;
void Loaded(object sender, RoutedEventArgs args)
{
bool tmpLoaded = m_Loaded;
m_Loaded = true;
if (tmpLoaded ) return;
// your code here...
}
祝你好运//杰瑞
答案 1 :(得分:2)
Jerry回答是每次控件变为可见时触发的Loaded事件问题的常见转变。
但我更喜欢没有连续评估繁琐标志的解决方案:只需在第一次触发时从de event中减去处理程序。
此外,通过这种方式,当控件在第一次显示后可见时,您可以附加另一个处理程序来执行代码。
public UserControl1()
{
InitializeComponent();
Loaded += new RoutedEventHandler(UserControl1FirstTime_Loaded);
}
void UserControl1FirstTime_Loaded(object sender, RoutedEventArgs e)
{
Loaded -= UserControl1FirstTime_Loaded; //This handler not called again
...................
//Add next line if you want code to be executed when de control becomes visible
//after first time.
Loaded +=UserControl1AfterFirstTimes_Loaded;
}
void UserControl1AfterFirstTime_Loaded(object sender, RoutedEventArgs e)
{
//Code to be executed when the control becomes visible after first time
....
}
答案 2 :(得分:1)
如此blog中所述,当即将呈现控件(即添加到可视树)时,会触发Loaded事件。
有几个控件会导致您的控件多次加载/卸载。例如,本机WPF TabControl仅呈现所选选项卡的内容。因此,当您选择新选项卡时,将卸载先前选定选项卡的内容。如果单击返回先前选择的选项卡,则会重新加载内容。