gpt4 book ai didi

wpf - 如何在发行版中调试 "Specified element is already the logical child of another element"

转载 作者:行者123 更新时间:2023-12-04 04:42:30 27 4
gpt4 key购买 nike

我知道我应该用代码示例发布一个非常具体的问题,但我不知道从哪里开始:

在 Visual Studio 中运行我的应用程序时,在调试和 Release模式下都可以。但是,当我创建 InstallShield 安装程序时,在其他计算机上出现异常:

System.Windows.Threading.Dispatcher WPF 指定元素已经是另一个元素的逻辑子元素。先断网

我在 StackOverflow 和其他网站上看到了大量关于这个问题的帖子,但没有任何引用资料表明这只发生在已安装的包中。

我的问题是双重的(也很抱歉):

  • 我怎么可能调试这样的问题?我的意思是,如果可能的话(不是通用运行时调试)
  • 我可以捕获什么样的异常来提供有关错误的更多信息?我正在显示一个显示 ReflectionTypeLoadException 的 MessageBox。我很想知道哪个元素是具有“双亲”或“双子”的元素。

  • 更复杂的是,该应用程序在我用于开发的计算机上运行良好,但在其他计算机(例如,我父亲和姐姐的计算机)中出现此异常时崩溃。

    任何线索都将受到赞赏和应有的赞成。谢谢

    - - - - - - - - - - - - - - - - - -编辑 - - - - - - - ----------------------

    我设法将麻烦的 child 逼到了 ListView 的 ItemTemplate 中名为“textAvisosSeccion”的 TextBlock:
    <ListView ItemsSource="{Binding Secciones}" Background="{Binding MiColor}"
    Style="{StaticResource NavigationMenuStyle}"
    IsSynchronizedWithCurrentItem="True"
    SelectedItem="{Binding SeccionActiva}"
    Margin="0" MinWidth="{Binding RelativeSource={RelativeSource
    AncestorType=ListBoxItem}, Path=ActualWidth}" HorizontalContentAlignment="Stretch">
    <ListView.ItemTemplate>
    <DataTemplate>
    <DockPanel LastChildFill="True" HorizontalAlignment="Stretch">
    <Grid DockPanel.Dock="Right" Margin="2,2,8,2"
    Visibility="{Binding ElementName=textAvisosSeccion, Path=Visibility, FallbackValue=Collapsed}">
    <Ellipse Height="25" Width="25" VerticalAlignment="Center"
    Stroke="WhiteSmoke" StrokeThickness="1" Fill="OrangeRed"/>
    <TextBlock x:Name="textAvisosSeccion" FontSize="12"
    FontWeight="Medium" Foreground="WhiteSmoke"
    VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center" Style="{StaticResource TextBlockNullZeroCollapsedStyle}"
    Text="{Binding Value.Avisos}"/>
    </Grid>

    <TextBlock DockPanel.Dock="Left" Text="{Binding Metadata.NombreTraducido}" Margin="8,2" VerticalAlignment="Center" HorizontalAlignment="Stretch" TextAlignment="Center"/>

    </DockPanel>
    </DataTemplate>
    </ListView.ItemTemplate>
    </ListView>

    <Style x:Key="TextBlockNullZeroCollapsedStyle" TargetType="TextBlock">
    <Style.Triggers>
    <Trigger Property="Text" Value="">
    <Setter Property="Visibility" Value="Collapsed"/>
    </Trigger>
    <Trigger Property="Text" Value="0">
    <Setter Property="Visibility" Value="Collapsed"/>
    </Trigger>
    </Style.Triggers>
    </Style>

    查看绑定(bind) Text="{Binding Value.Avisos}"。 ListView 绑定(bind)到 Lazy<T> 的集合使用 MEF 导入,其中 T 具有“Avisos”属性。另一个 TexkBlock 绑定(bind)到 Lazy<T>的元数据,这很好。

    除了我绑定(bind)到惰性值的原因(实例化对象,失去惰性的优势)之外,为什么我会因为这个而得到“指定元素已经是另一个元素的逻辑子元素”异常?!?!?

    “Avisos”属性只是 ViewModel 中的一个整数(不是从 UIElement 继承的)。

    编辑#2:

    VS2012 中没有抛出类似这个和其他异常(样式问题、MEF 组合问题等)的异常,因为它安装了 .NET Framework 4.5 的计算机。即使所有项目都针对 Framework 4.0。

    如果你正在为 4.0 开发,请使用 Vista 的旧机器,确保你已安装 4.0 并使用 VS2010;这是确保的唯一方法。

    最佳答案

    这不是问题的真正答案,而是我找到的问题解决方案:在客户端机器上安装 .NET Framework 4.5,应用程序运行起来就像一个魅力。

    删除麻烦的 TextBlock 后,应用程序打开了,但在很多地方都抛出了相同的异常,但没有明显的原因:一些 ViewModel 和 View 工作正常,而另一些则没有。当然,它们都是以相同的方式构建的,所以这里没有解释。

    我发现这个 SO question 指的是这个问题,但没有好的答案:

    Did WPF 4.5 parent-child behavior change: we can now add a child to another parent without exception?

    对于这个人来说,它创造了一个问题而不是解决它。然而,一个可怕的问题出现了:我们怎么知道在下一个框架版本中是否一切都会一样?也许这是 4.0 中的一个 bug,在 4.5 中修复,他们不想谈论它。

    另一个主要问题是异常没有提供有关哪些元素有问题的真实信息,因此它几乎无法调试。我在某个论坛上发现这是作为改进建议发布给 Microsoft 的,但他们一再拒绝。

    希望这对某人有所帮助,我也希望有人告诉我如何更深入地挖掘异常以了解哪个元素在提示。

    在这里也复制 EDIT #2:

    VS2012 中没有抛出类似这个和其他异常(样式问题、MEF 组合问题等)的异常,因为它安装了 .NET Framework 4.5 的计算机。即使所有项目都针对 Framework 4.0。

    如果你正在为 4.0 开发,请使用 Vista 的旧机器,确保你已安装 4.0 并使用 VS2010;这是确保的唯一方法。

    关于wpf - 如何在发行版中调试 "Specified element is already the logical child of another element",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18676528/

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