gpt4 book ai didi

WPF、Loaded 事件、IsLoaded 属性

转载 作者:行者123 更新时间:2023-12-04 14:32:39 25 4
gpt4 key购买 nike

如果我将处理程序附加到元素的 Loaded 事件(无论它是在 VS 设计器中还是在代码中),它会将 IsLoaded 属性设置为 true。

例如,我有一个带有两个 TabItem 的 TabControl。每个 TabItem 上都有一个按钮。第一个 TabItem 是默认项(显示我的窗口时选择)。第二个 TabItem 上的 Button 附加了 Loaded 事件。在这种情况下,第一个 TabItem 上的按钮将 IsLoaded 设置为 true,而第二个 TabItem 上的按钮应设置为 false,但它已设置为 true。

当我取消设置 Loaded 事件时,它按预期工作 - 第一个按钮的 IsLoaded 为真,第二个按钮为假。

这是一个 wpf 错误还是我做错了什么?

编辑:

查看示例。

此代码导致 btn2 的 IsLoaded 属性设置为 True(注意:btn2_Loaded 方法为空)。

XAML:

    <Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TabControl>
<TabItem Header="Tab1">
<Button x:Name="btn1" Click="btn1_Click" />
</TabItem>

<TabItem Header="Tab2">
<Button x:Name="btn2" Loaded="btn2_Loaded" />
</TabItem>
</TabControl>
</Grid>
</Window>

C#:

    private void btn1_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(this.btn2.IsLoaded.ToString());
}

启动应用程序,只需单击 btn1。

现在删除 Loaded 处理程序:

            <TabItem Header="Tab2">
<Button x:Name="btn2" />
</TabItem>

再次启动应用程序并单击 btn1。

现在 IsLoaded 为 False!为什么会这样?附加事件处理程序会导致加载特定元素?

最佳答案

这既不是 WPF 中的错误,也不是您做错了什么。 Object Lifetime Events 上的 MSDN 页面说

The Loaded event is raised before the final rendering, but after the layout system has calculated all necessary values for rendering.

您无法对何时调用 Loaded 做出任何更精确的假设。在您的情况下,我猜想 WPF 会延迟加载不可见(即尚未呈现)元素,除非附加了 Loaded 处理程序。这样做是免费的。

关于WPF、Loaded 事件、IsLoaded 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10709170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com