2

コードサンプルを使用して非常に具体的な質問を投稿することになっていることはわかっていますが、どこから始めればよいかわかりません。

Visual Studio でアプリを実行している間は、デバッグ モードとリリース モードの両方で問題ありません。しかし、InstallShield インストーラーを作成すると、他のコンピューターで例外が発生します。

System.Windows.Threading.Dispatcher WPF 指定された要素は、既に別の要素の論理的な子です。最初に切断する

StackOverflow や他の Web でこの問題に関する多くの投稿を見てきましたが、インストールされたパッケージでのみ発生する参照はありません。

私の質問は二重です(それも申し訳ありません):

  1. どうすればそのような問題をデバッグできますか? つまり、特に可能であれば(一般的なランタイムデバッグではありません)
  2. エラーに関する詳細情報を得るには、どのような種類の例外をキャッチできますか? 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 はLazy<T>、T が "Avisos" プロパティを持つ、MEF でインポートされた のコレクションにバインドされます。他の TexkBlock はLazy<T>のメタデータにバインドされており、問題ありません。

レイジーの値にバインドしている理由 (オブジェクトをインスタンス化し、レイジーの利点を失う) のほかに、このために「指定された要素は既に別の要素の論理的な子です」という例外が発生するのはなぜですか?!?!?

「Avisos」プロパティは、ViewModel (UIElement から継承されていない) 内の単なる整数です。

編集#2:

このような例外 (スタイルの問題、MEF 構成の問題など) は、コンピューターに .NET Framework 4.5 がインストールされているため、VS2012 ではスローされませんでした。すべてのプロジェクトが Framework 4.0 を対象としていたとしても.

4.0 向けに開発している場合は、Vista を搭載した古いマシンを入手してください。4.0 がインストールされていることを確認し、VS2010 を使用してください。それが確認する唯一の方法です。

4

1 に答える 1