我有一个定义为ItemTemplate的ListBox。我的问题是图像只显示在每个类型的一个项目中。即:

如何使所有项目显示其相关状态?
<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>发布于 2013-03-04 15:55:02
我在stackoverflow上找到了this
如果您要在多个地方使用图像,那么只需将图像数据加载到内存中一次,然后在所有图像元素之间共享它是值得的。
为此,请在某个位置创建一个BitmapSource作为资源:
<BitmapImage x:Key="MyImageSource" UriSource="../Media/Image.png" />然后,在您的代码中使用如下内容:
<Image Source="{StaticResource MyImageSource}" /> 在我的例子中,我发现我必须将Image.png文件设置为
的构建操作,而不仅仅是内容。这会导致在编译后的程序集中携带图像。
发布于 2013-03-04 16:07:01
Image是一个UIElement,这意味着它是控件层次结构的一部分,并且在任何给定时间只能有一个父级。
您的模板所做的是设置与许多ContentControl的内容相同的Image控件实例。因此,它只对第一个ContentControl有效,然后失败,因为Image已经有了父级。
您可以尝试将ContentControl替换为Image,并在DataTrigger%s中设置Image的源。
https://stackoverflow.com/questions/15196732
复制相似问题