我的ListBox
ItemTemplate
定义如下。我的问题是图像每种类型只显示一个项目。即:
如何让所有项目显示其相关状态?
<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>
答案 0 :(得分:2)
我在stackoverflow上找到了this
如果您将在多个地方使用图像,那么值得加载 图像数据只进入一次内存然后在所有内容之间共享 图像元素。
为此,在某处创建一个BitmapSource作为资源:
<BitmapImage x:Key="MyImageSource" UriSource="../Media/Image.png" />
然后,在您的代码中,使用类似:
的内容
<Image Source="{StaticResource MyImageSource}" />
就我而言,我找到了 我必须将Image.png文件设置为具有构建操作 资源而不仅仅是内容。这导致图像被携带 在你编译的程序集中。
答案 1 :(得分:0)
Image
是UIElement
,意味着它是控件层次结构的一部分,在任何给定时间只能有一个父级。
您的模板正在做的是设置与许多Image
的内容相同的ContentControl
控件实例。因此它仅适用于第一个ContentControl
,然后失败,因为Image
已经是父级。
您可以尝试将ContentControl
替换为Image
并在Image
中设置DataTrigger
的来源。