你如果 把 Collapsed  改成 Hidden,它或许永远都不会出现弹出框。

解决方案 »

  1.   

    我试了一下,改成Hidden,不仅会弹出对话框,而且每次都会弹出
    我更迷惑了..........
      

  2.   

    设置Visibility ="Collapsed"只是说CustomControl1看不到,但是看不到和触发load事件是没有关系的。
    只要在xaml调了  <local:CustomControl1 Margin="0,144,10,145" Width="Auto"/>
    就会执行load
      

  3.   

    你是想法和我一样,但是,事与愿违。并没有触发load事件
      

  4.   

    我试了一下,改成Hidden,不仅会弹出对话框,而且每次都会弹出
    我更迷惑了..........
    我的理解是,这是xaml编译的问题,你可以在一个布局页面,尝试去修改visible的几个属性,会发现可以得到不同的结果
    修改成 Collapsed  ,发现 该部分被隐藏;修改成Hidden,发现 该部分没有显示,但它所占用的区域还是呈现出来的。
    xaml会转换成BAML(二进制应用程序标记语言),最终会最为资源,生成相应的dll文件。 
      

  5.   

    Visibility有3个枚举值,Visble,Collapsed(元素不可见且不参与布局),Hidden(元素不可见却参与布局)
      

  6.   

    真的搞不懂是什么原因了。<Window x:Class="WPF2.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:WPF2" 
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Button Content="李四" Visibility="Collapsed" Loaded="Button_Loaded"/>
        </Grid>
    </Window>
    private void Button_Loaded(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("jhkjk");
    }如果如你所说,这段代码中就不应该弹出对话框,而事实上,每次编译都会弹出对话框
      

  7.   

    this.Loaded += CustomControl1_Loaded;
    改到构造函数执行
      

  8.   

    你的意思是,在Loaded中去设置Visibility?可是上面的问题没有得到解决啊
    我感觉WPF就像新东西,好多问题都没人知道
      

  9.   

    你的意思是,在Loaded中去设置Visibility?可是上面的问题没有得到解决啊
    我感觉WPF就像新东西,好多问题都没人知道
    说得还不够清楚?在构造函数里添加Loaded时间委托
      

  10.   

    楼主的问题问得不清。你说编译运行会出问题,那么直接运行exe还有问题吗?这很重要。我运行了你的代码,不论调试运行还是直接运行,第一次会弹出对话框,以后都不会了。不知道重启电脑后怎么样,没测试。这应该跟WPF的某种缓存有关。其次是你的设计问题,P_xG说得很清楚,你应该在构造函数里订阅事件。构造函数这么方便,你怎么会用到隐藏这么深的OnApplyTemplate?WPF 框架级布局系统将在每个测量处理过程中调用 ApplyTemplate。[1]OnApplyTemplate被ApplyTemplate调用。Visibility 不为 Visible 的元素不参与输入事件(或命令),不影响布局的测量或排列处理过程,不在 Tab 键序列中,并且不会在命中测试中报告。[2]
      

  11.   

    其实无需告诉我怎么做,我就是想知道Collapsed值对元素的Loaded事件有什么影响。MSDN只说过:
    Visibility 不为 Visible 的元素不参与输入事件(或命令),不影响布局的测量或排列处理过程,不在 Tab 键序列中,并且不会在命中测试中报告。
      

  12.   


    WPF 框架级布局系统将在每个测量处理过程中调用 ApplyTemplate。[1]OnApplyTemplate被ApplyTemplate调用。Visibility 不为 Visible 的元素不参与输入事件(或命令),不影响布局的测量或排列处理过程,不在 Tab 键序列中,并且不会在命中测试中报告。[2]
      

  13.   


    WPF 框架级布局系统将在每个测量处理过程中调用 ApplyTemplate。[1]OnApplyTemplate被ApplyTemplate调用。Visibility 不为 Visible 的元素不参与输入事件(或命令),不影响布局的测量或排列处理过程,不在 Tab 键序列中,并且不会在命中测试中报告。[2]
    正因为如此,就迷惑了。
    MSDN说:WPF 框架级布局系统将在每个测量处理过程中调用 ApplyTemplate。
    而正如你所粘贴的MSDN:Visibility 不为 Visible 的元素不参与输入事件(或命令),不影响布局的测量或排列处理过程。既然Visibility为Collapsed也不会影响布局的测量,那么楼顶的代码中,OnApplyTemplate方法就应该执行,Loaded事件也就会关联。然而,并没有如此
      

  14.   

    不影响布局的测量我认为意思是不参与布局的测量。又,在每个测量处理过程中调用 ApplyTemplate,则Visibility为Collapsed的元素不参与测量,不会被调用ApplyTemplate,不会被调用OnApplyTemplate。