0

ボタンをクリックするだけでグリッドビューにアイテムを追加していますが、アイテムごとに異なる画像を表示したいと考えています。6つのアイテムがあり、6つの異なるテンプレートを作成したくありません。単一のテンプレートでこれを行う方法はありますか?以下は私のデータテンプレートのコードスニペットです:

<StackPanel>


                <!-- Shadow -->
                <Image Source="{Binding Time, Converter={StaticResource ThemeImageConverterClockShadow}}" Stretch="None" HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Left="10"
                    Canvas.Top="25"/>



                <!-- Face -->
                <Image Source="{Binding Time, Converter={StaticResource FaceBackground}}" Stretch="None" HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Left="10"
                    Canvas.Top="10" />
<StackPanel/>

各アイテムのシャドウ画像のみを変更したい。プロパティをバインドして、番号に基づいて別の画像を返してみました。グリッドビューアイテムの存在。ただし、新しいアイテムがグリッドビューに追加されるたびに、すべてのグリッドビューアイテムの画像が変更されます

更新:役立つ場合はGridview

<GridView              


         x:Name="ThemeGridView"                    
                ItemsSource="{Binding Clocks}" 
                ItemTemplate="{StaticResource WorldClockTemplate}"
                SelectionChanged="Clock_SelectionChanged"              
                ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                HorizontalAlignment="Center"
                VerticalAlignment="Center" ItemContainerStyle="{StaticResource GridViewItemStyle1}">
            <GridView.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapGrid />
                </ItemsPanelTemplate>
            </GridView.ItemsPanel>

        </GridView>
4

1 に答える 1

1

私はあなたのコードで何が起こっているか知っていると思います。GridViewコンバーターのアイテム数を使用しThemeImageConverterClockShadowて適切な画像を選択していると思います。新しいアイテムがすべてのバインディングに追加されるたびに、GridViewほとんどの場合再評価されます。これが、すべての行で同じ画像が得られる理由を説明しています。代わりに、使用する影の画像を示すプロパティをデータ項目に設定し、新しい項目を に追加するときに値を設定する必要がありますItemsSource

1つの選択肢は次のとおりです。

<StackPanel>
    <!-- Shadow -->
    <Image Source="{Binding ShadowImage}" Stretch="None" HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Left="10"
                Canvas.Top="25"/>

    <!-- Face -->
    <Image Source="{Binding Time, Converter={StaticResource FaceBackground}}" Stretch="None" HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Left="10"
                Canvas.Top="10" />
<StackPanel/>

ImageSource ShadowImageのデータ項目にプロパティがある場所ItemsSource:

public class MyDataItem 
{
    ....
    public ... Time { get { ... } set { ... } }
    public ImageSource ShadowImage { get { ... } set { ... } }
}

に行を追加するコードでデータ項目を作成するときに、イメージを設定しますGridView。または、代わりにいくつかのShadowTypeプロパティを追加し、コンバーターを使用してデータ項目全体にバインドし、 と の両方を使用TimeShadowTypeて画像を選択することもできます。

<StackPanel>
    <!-- Shadow -->
    <Image Source="{Binding Converter={StaticResource ThemeImageConverterClockShadow}}" Stretch="None" HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Left="10"
                Canvas.Top="25"/>

    <!-- Face -->
    <Image Source="{Binding Time, Converter={StaticResource FaceBackground}}" Stretch="None" HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Left="10"
                Canvas.Top="10" />
<StackPanel/>

次の行に沿って Converter を使用します。

public class ThemeImageConverterClockShadow : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var dataItem = value as MyDataItem;
        if (dataItem != null)
        {
           // Use dataItem.Time and dataItem.ShadowType to select an image
        }
    }
}
于 2013-01-18T10:18:50.260 に答える