0

NotebookPageCanvas を含む DataTemplate を持つ FlipView があります。NotebookPageCanvas は Canvas から派生し、InkManager を含みます。このキャンバスに子要素を動的に追加していますが、FlipView の他のページで子要素が繰り返されていることがわかりました。

たとえば、FlipView で 10 個のアイテムから始めて、インデックス 0 でキャンバスに Rectangle を動的に追加すると、インデックス 3 で四角形もキャンバスに追加されます。その後、子コントロールがどのように動作するかのパターンが見つかりません。これが私の FlipView XAML です。

<FlipView
        x:Name="flipView"
        AutomationProperties.AutomationId="ItemsFlipView"
        AutomationProperties.Name="Item Details"
        TabIndex="1"
        Grid.RowSpan="2"

        ItemsSource="{Binding Source={StaticResource itemsViewSource}}" SelectionChanged="flipView_SelectionChanged" >

        <FlipView.ItemContainerStyle>
            <Style TargetType="FlipViewItem">
                <Setter Property="Margin" Value="0,137,0,0"/>
            </Style>
        </FlipView.ItemContainerStyle>

        <FlipView.ItemTemplate>
            <DataTemplate>


                <local:NotebookPageCanvas  x:Name="InkCanvas" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                    <Canvas.Background>
                        <SolidColorBrush Color="{Binding BackgroundColor}" />
                    </Canvas.Background>

                    <TextBlock Foreground="BlueViolet" Canvas.Left="0" Canvas.Top="100" Text="{Binding Title}" />

                </local:NotebookPageCanvas>


            </DataTemplate>
        </FlipView.ItemTemplate>
    </FlipView>

私が間違っていることは何ですか?

4

1 に答える 1

1

どうやらFlipView仮想化は、より多くのデータをロードする必要があるときに既存のアイテムをリサイクルしています。新しい に関連付ける前に、キャンバスのコンテンツを消去するだけで済みますDataContext。1 つの方法は、バインディングを使用してキャンバスの子を設定し、新しいコンテンツを追加する前に常に既存のコンテンツを消去することです。

于 2013-03-24T05:05:36.247 に答える