某些ListBoxItems中没有显示wpf图像

时间:2013-03-04 07:40:32

标签: c# wpf

我的ListBox ItemTemplate定义如下。我的问题是图像每种类型只显示一个项目。即:

enter image description here

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

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

2 个答案:

答案 0 :(得分:2)

我在stackoverflow上找到了this

  

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

     

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

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

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

的内容
<Image Source="{StaticResource MyImageSource}" /> 
  

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

答案 1 :(得分:0)

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

您的模板正在做的是设置与许多Image的内容相同的ContentControl控件实例。因此它仅适用于第一个ContentControl,然后失败,因为Image已经是父级。

您可以尝试将ContentControl替换为Image并在Image中设置DataTrigger的来源。