我知道我应该用代码示例发布一个非常具体的问题,但我不知道从哪里开始:
在 Visual Studio 中运行我的应用程序时,在调试和发布模式下都可以。但是,当我创建 InstallShield 安装程序时,在其他计算机上出现异常:
System.Windows.Threading.Dispatcher WPF 指定元素已经是另一个元素的逻辑子元素。先断网
我在 StackOverflow 和其他网站上看到了大量关于这个问题的帖子,但没有任何参考资料表明这只发生在已安装的包中。
我的问题是双重的(也很抱歉):
- 我怎么可能调试这样的问题?我的意思是,特别是如果可能的话(不是通用的运行时调试)
- 我可以捕获什么样的异常来提供有关错误的更多信息?我正在显示一个显示 ReflectionTypeLoadException 的 MessageBox。我很想知道哪个元素是具有“双亲”或“双子”的元素。
更复杂的是,该应用程序在我用于开发的计算机上运行良好,但在其他计算机(例如,我父亲和姐姐的计算机)中出现此异常时崩溃。
任何线索都将受到赞赏和应有的赞成。谢谢
- - - - - - - - - - - - - - - - - -编辑 - - - - - - - ----------------------
我设法将麻烦的孩子逼到了 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>
查看绑定 Text="{Binding Value.Avisos}"。ListView 绑定到使用 MEF 导入的集合Lazy<T>
,其中 T 具有“Avisos”属性。另一个 TexkBlock 绑定到Lazy<T>
的元数据,这很好。
除了我绑定到惰性值的原因(实例化对象,失去惰性的优势)之外,为什么我会因为这个而得到“指定元素已经是另一个元素的逻辑子元素”异常?!?!?
“Avisos”属性只是 ViewModel 中的一个整数(不是从 UIElement 继承的)。
编辑#2:
VS2012 中没有抛出类似这个和其他异常(样式问题、MEF 组合问题等),因为它安装了 .NET Framework 4.5 的计算机。即使所有项目都针对 Framework 4.0。
如果你正在为 4.0 开发,请使用 Vista 的旧机器,确保你已安装 4.0 并使用 VS2010;这是确保的唯一方法。