2

ItemContainerStyleSelector を持つ Windows ストア アプリに GridView があります。スタイル内には、ソースを設定するためのカスタム依存関係プロパティを持つ Image コントロールがあります (これは、Image のハンドルを取得し、アンロードされたイベントに接続できるようにするためです)。私の問題は、イメージがアンロードされず、再利用されているように見えることです。これは、ソースを設定すると、GridView 内の他の項目にも画像が設定されることを意味します (たとえば、画像を持たないオブジェクトがありますが、スクロールしてからもう一度戻ると、別のオブジェクトからの画像があります)。

可能な限り仮想化モードを標準に設定しようとしましたが、役に立ちません。どんなアイデアでも大歓迎です。

スタイルに含まれるイメージは次のとおりです。これは、設定時にメソッド「OnRemoteURISourceChanged」に渡されます。メソッドが呼び出されるたびに別のイメージ コントロールが期待されますが、そうではありません。

<Image x:Name="BackgroundImage" DataContext="{Binding CurrentBackdrop}" helpers:ImageExtensions.RemoteURISource="{Binding Uri}" Stretch="UniformToFill"/>

そして、ここに私のGridViewがあります

<GridView x:Name="ItemsGrid" Grid.Row="1" ItemsSource="{Binding BrowseResults}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" Margin="20,0,20,0"
              IsItemClickEnabled="True" ItemClick="ItemsGrid_ItemClick" VirtualizingStackPanel.VirtualizationMode="Standard">
        <GridView.ItemContainerStyleSelector>
            <controls:UPnPCDStyleSelector CDObject="{StaticResource somestyle1}" Container="{StaticResource somestyle2}" Item="{StaticResource somestyle3}"/>
        </GridView.ItemContainerStyleSelector>
        <GridView.ItemsPanel>
            <ItemsPanelTemplate VirtualizingStackPanel.VirtualizationMode="Standard">
                <WrapGrid Orientation="Vertical" VirtualizingStackPanel.VirtualizationMode="Standard"/>
            </ItemsPanelTemplate>
        </GridView.ItemsPanel>
    </GridView>

更新: 問題は WrapGrid にあるようです。これを VirtualizingStack Panel に変更し、VirtualizationMode を Standard に設定すると、すべてが期待どおりに機能しますが、明らかに私のアイテムは 1 行にしか表示されず、複数行には表示されません。

WrapGrid の仮想化モードを設定するにはどうすればよいですか?

4

2 に答える 2

0

プロパティまたはそのプロパティ値のいずれかがnullhelpers:ImageExtensions.RemoteURISourceの場合、クリアしない可能性はありますか?Image.SourceCurrentBackdropUri

于 2013-02-06T16:21:32.297 に答える
0

img ソースをロードしているタスクが、待機中にデフォルトの UI コンテキストに戻ることは確かですか? Image.Source プロパティ フォーム コードを設定するのは良い考えではないと思います。より良い解決策は、カスタムの監視可能なタスク クラスを作成し、im ソースをその結果にバインドすることです。バックグラウンドでタスクを呼び出すことができます。コントロールをイメージにする必要がありますか? テンプレート付きのコントロールであれば、それを行う方が簡単だからです。ご希望であれば、それを行うクラスをお送りします。

于 2015-02-28T12:36:14.243 に答える