0

我有ListBox一个ItemTemplate定义如下。我的问题是图像仅显示在每种类型的一个项目中。IE:

在此处输入图像描述

如何使所有项目显示其相关状态?

<ListBox.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <ContentControl x:Name="status">
                <ContentControl.Style>
                    <Style TargetType="ContentControl">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Status}" Value="NotDownloaded">
                                <Setter Property="Content">
                                    <Setter.Value>
                                        <Image Source="/Images/help-file24.png"/>
                                    </Setter.Value>
                                </Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Status}" Value="Downloaded">
                                <Setter Property="Content">
                                    <Setter.Value>
                                        <Image Source="/Images/file-complete24.png""/>
                                    </Setter.Value>
                                </Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Status}" Value="Error">
                                <Setter Property="Content">
                                    <Setter.Value>
                                        <Image Source="/Images/file-warning24.png"/>
                                    </Setter.Value>
                                </Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </ContentControl.Style>
            </ContentControl>
            <TextBlock Text="{Binding Url}" Margin="5,0" />
        </StackPanel>
    </DataTemplate>
</ListBox.ItemTemplate>
4

2 回答 2

2

我在stackoverflow上找到了这个

如果您将在多个地方使用图像,那么值得将图像数据仅加载一次到内存中,然后在所有图像元素之间共享它。

为此,请在某处创建一个 BitmapSource 作为资源:

<BitmapImage x:Key="MyImageSource" UriSource="../Media/Image.png" />

然后,在您的代码中,使用类似:

<Image Source="{StaticResource MyImageSource}" /> 

就我而言,我发现我必须将 Image.png 文件设置为具有资源的构建操作,而不仅仅是内容。这会导致图像在您编译的程序集中携带。

于 2013-03-04T07:55:01.987 回答
0

Image是一个UIElement,意味着它是控件层次结构的一部分,并且在任何给定时间只能有一个父级。

您的模板所做的是将相同的Image控件实例设置为许多ContentControl. 所以它只适用于第一个ContentControl,然后像Image已经是父母一样失败。

您可以尝试在您ContentControl的s.ImageImageDataTrigger

于 2013-03-04T08:07:00.733 回答