WPF Loaded事件连续调用两次的问题
最近开发的一套系统中,在检查开发成员的代码时候,在Loaded事件中加上以下语句:
this.Loaded -= new RoutedEventHandler(***_Loaded);这让我觉得有些奇怪。如是参照系统中的代码逻辑写了一个demo。
MainWindow代码如下:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
TabItem item = new TabItem();
UserControl1 test = new UserControl1();
item.Header = "测试。。。";
item.Content = test;
item.IsSelected = true;
tbc.Items.Add(item);
}
UserControl1再加载一个UserControl2,前台代码如下,后台没有代码:
<Grid x:Name="detailGrid">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*"/>
<ColumnDefinition Width="4"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ScrollViewer Grid.Column="2">
<StackPanel>
<my:UserControl2 Margin="3" />
</StackPanel>
</ScrollViewer>
</Grid>
UserControl2 的代码如下:
前台:
<UserControl x:Class="两次Loaded事件.UserControl2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" Loaded="UserControl_Loaded">
<Grid>
<Expander ExpandDirection="Down" IsExpanded="True" x:Name="grpRunInfo">
<Expander.Header>
<TextBlock Text="运行信息"/>
</Expander.Header>
<Expander.Content>
<ScrollViewer Name="scrollViewer1" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<Button Content="第二层" Height="60" Name="button1" Width="123" />
</ScrollViewer>
</Expander.Content>
</Expander>
</Grid>
</UserControl>
后台:
public partial class UserControl2 : UserControl
{
public UserControl2()
{
InitializeComponent();
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
Console.WriteLine("调用uc的loaded");
if (this.IsLoaded)
{
string s = string.Empty;
}
else
{
string b = string.Empty;
}
}
}
就这样简单的一些代码出现了一个奇怪的问题;Usercontrol2的Loaded事件走两次,检查后发现以为是item.IsSelected = true;这句代码让Loaded事件跑了第二遍,其实不然,把这句代码注释掉Usercontrol2的Loaded事件仍然跑两遍。这就头大了,向各群里的同行求助,都没有找到原因或是原因不正确。最后自己挨个检查,发现是Usercontrol1的ScrollViewer控件有问题,把<ScrollViewer Grid.Column="2">这层注释,只留下<StackPanel>这层就不会走两遍UserControl2的Loaded事件。个人理解是不是ScrollViewer加载控件导致UserControl2的Loaded事件走了第二遍,没高人指点就只能这样去理解了。正在这时我把demo发给群里的一哥们有了回复,他说没有我碰到的问题,就只走了一次,这就让我纳闷了,我以为是他没有理解我说的问题或者是我说的问题没有描述清楚。既然我已经知道原因了就没太在意。打算跟开发人员说问题所在并且如何修改。这时候又一之前讨论的人有了回复也说没有碰到我说的问题,他说是不是我的ide有问题,让我重装,我说我用的是vs2010,他说他用的是vs2012;难道是这个原因?又去问前一个说没有碰到问题的人,他也说是用的vs2012。我就问他的编译环境是不是用的.net4.5,他说是4.0;我说我也是用的4.0应该不存在问题的啊;如是我自己下载了一个2013安装并测试,也用的是.net4.0;同样的demo果然没有出现Loaded事件走两次。不理解原因所在,请高手指点。
WPF Loaded事件连续调用两次的问题的更多相关文章
- javascript onclick事件可以调用两个方法吗?
答案是:可以的,onclick事件可以调用多个方法,每个方法之间用分号(:)隔开即可. onclick后面其实是可以写任何代码的,但是一般不建议这么写!! 例:onclick="fun1() ...
- 连续调用inet_ntoa打印出错的问题
近日写程序,在打印信息的时候调用了inet_ntoa函数,出现了打印一直出错的情况.google了一下,是因为inet_ntoa这类函数没有保证线程安全,其实现原理是在静态内容中申请一块内存,每次调用 ...
- spring中配置quartz调用两次及项目日志log4j不能每天生成日志解决方法
在quartz中配置了一个方法运行时会连续调用两次,是因为加载两次,只需在tomcat的server.xml中修改配置 <Host name="www.xx.cn" appB ...
- vs2010 和vs2012的区别 副标题--Loaded事件走两次
我上一遍博文没有通过首页显示!这边就简短的描述一下问题,希望大拿们有遇到类似问题或者知道原因的回答一下下!!! 最终的问题是Loaded事件走两次,具体可以看我上一篇对问题的描述. 在目标框架同样都是 ...
- wpf 的依赖属性只能在loaded 事件之后才能取到
wpf 的依赖属性只能在loaded 事件之后才能取到,在构造函数的 InitializeComponent(); 之后取不到 wpf 的依赖属性只能在loaded 事件之后才能取到,在构造函数的 ...
- keydown事件下调用trigger事件执行两次
$('button[type=button]').on('click',login); //登录 $(document).keydown(function(event){ if(event.keyCo ...
- WPF 委托 事件 B窗体调用A窗体方法
原文:WPF 委托 事件 B窗体调用A窗体方法 具体实现 A窗体 中加载B窗体 B窗体触发A窗体里的方法 当点击B窗体确定Button事件 给A窗体俩个TextBox赋值 并关闭B窗体 B窗体 ...
- WPF 在事件中绑定命令(不可以在模版中绑定命令)
其实这也不属于MVVMLight系列中的东东了,没兴趣的朋友可以跳过这篇文章,本文主要介绍如何在WPF中实现将命令绑定到事件中. 上一篇中我们介绍了MVVMLight中的命令的用法,那么仅仅知道命令是 ...
- WPF路由事件二:路由事件的三种策略
一.什么是路由事件 路由事件是一种可以针对元素树中的多个侦听器而不是仅仅针对引发该事件的对象调用处理程序的事件.路由事件是一个CLR事件. 路由事件与一般事件的区别在于:路由事件是一种用于元素树的事件 ...
随机推荐
- 关于monkeyrunner的一些初步理解性的题目
1.Monkeyrunner中包含几个基本类?分别大概的作用是什么? Monkeyrunner中基本包含了MonkeyRunner,MonkeyDevice,MonkeyImage MonkeyRun ...
- .net操作word lib DocX
http://cathalscorner.blogspot.hk/2010/06/cathal-why-did-you-create-docx.html using (DocX document = ...
- 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性
本文转载自:http://blog.sina.com.cn/s/blog_5d65a16901011kom.html 关键字:内省.JavaBean.PropertyDescriptor类.Int ...
- HTTP Client工具类
HTTP Client工具类: import org.apache.http.Header;import org.apache.http.HttpEntity;import org.apache.ht ...
- aspx页面调用发送邮件验证码(结合前两篇)
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs ...
- doT.js源码解读
doT.js非常的简洁.全部代码也就200行不到.它的基本思路就是通过强大的正则表达式,把模块转变成可执行的函数,动态生成html字符串.核心new Function(c.varname, str); ...
- android 很多牛叉布局github地址(转)
原文地址 http://blog.csdn.net/luo15309823081/article/details/41449929 点击可到达github-------https://github.c ...
- Charles
1. charles使用教程指南+客户端弱网测试:http://blog.csdn.net/anualday/article/details/51423457 2.使用Charles对Https请求进 ...
- 《第一本docker书》- 第一章笔记
环境: Ubuntu 14.04.2 LTS (GNU/Linux 3.16.0-30-generic i686) 第一章: 1 Docker客户端和服务器 2 Docker镜像 添加一个文件,执行一 ...
- 如何去掉div滚动条
1.去掉横向滚动条 style="overflow-x:hidden" 2.去掉纵向滚动条 style="overflow-y:hidden" 3.同时去掉横向 ...