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.

一种选择是:

<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属性,然后仍然使用转换器但绑定到整个数据项,然后同时使用TimeandShadowType来选择图像:

<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/>

使用转换器,如下所示:

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 回答