0

まず、私がやろうとしていることです。1つのスタックパネルのアイテムの順序を動的に逆にして、1秒で逆の順序で追加する必要があります。これが私が使用しているコードです:

 Dim cp As ContentPresenter = TryCast(Utilities.GetDescendantFromName(TitleLegend, "ContentPresenter"), ContentPresenter)
        If cp IsNot Nothing Then
            Dim sp As StackPanel = TryCast(cp.Content, StackPanel)
            If sp IsNot Nothing Then
                Dim nsp As New StackPanel() With {.Orientation = System.Windows.Controls.Orientation.Vertical}
                Dim count As Integer = sp.Children.Count
                For i As Integer = count - 1 To 0 Step -1
                    Dim cc As ContentControl = TryCast(sp.Children(i), ContentControl)
                    If cc IsNot Nothing Then
                        sp.Children.Remove(cc)
                        nsp.Children.Add(cc)
                    End If
                Next
                cp.Content = Nothing
                cp.Content = nsp
            End If
        End If

このコードは正常に実行されますが、ユーザーコントロールが読み込まれる直前にエラーが発生します。私はここを見回しましたが、うまくいくように見える解決策は、私がすでに行っている最初のコレクションから子を削除することです。どんな助けでもいただければ幸いです。ありがとうございました

4

1 に答える 1

0

これは、他の誰かがこの状況に遭遇した場合に備えて、問題を解決するために使用したソリューションです。

  Dim cp As ContentPresenter = TryCast(Utilities.GetDescendantFromName(TitleLegend, "ContentPresenter"), ContentPresenter)
        If cp IsNot Nothing Then
            Dim sp As StackPanel = TryCast(cp.Content, StackPanel)

            If sp IsNot Nothing Then
                If tempList Is Nothing Then
                    tempList = New List(Of ContentControl)
                End If
                Dispatcher.BeginInvoke(New Action(Function()
                                                      Dim count As Integer = sp.Children.Count
                                                      For i As Integer = count - 1 To 0 Step -1
                                                          Dim cc As ContentControl = TryCast(sp.Children(i), ContentControl)
                                                          sp.Children.Remove(TryCast(sp.Children(i), ContentControl))
                                                          If cc IsNot Nothing Then
                                                              tempList.Add(cc)
                                                          End If
                                                      Next

                                                      For i As Integer = count - 1 To 0 Step -1
                                                          Dim cc As ContentControl = TryCast(tempList(0), ContentControl)
                                                          tempList.Remove(TryCast(tempList(0), ContentControl))
                                                          If cc IsNot Nothing Then
                                                              sp.Children.Add(cc)
                                                          End If
                                                      Next

                                                  End Function), System.Windows.Threading.DispatcherPriority.Background, Nothing)
            End If
        End If
于 2012-11-30T16:53:22.240 に答える