您的问题是由于 WPF 呈现ListBox中的每个项目的方式。它使用ItemContainerStyle将每个项目包装在ListBoxItem中。正是这个ListBoxItem包含要显示的内容(在您的情况下是包含图像和文本块的 StackPanel)。
默认情况下,ListBoxItem在它显示的所有内容周围显示蓝色矩形。
我想出了一个解决方案,但它是一个 hack。只需将图像放大并让背景像素颜色与列表框的背景颜色匹配(在我的情况下为白色)并使用以下 XAML。
<ListBox Margin="5"
ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal"
Margin="-2,0,0,0">
<Image Source="Save-icon.png" />
<TextBlock Margin="5,8,0,0"
Text="{Binding}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这是结果:
更新
我想出了一个修改,这使得它少了一点黑客攻击。在我的ItemTemplate中,我用一个Border包围了图像,它使用绑定从它的父ListBox获取其背景颜色。(图像周围不再有边框)。
将 XAML 更新为此:
<ListBox Margin="5"
ItemsSource="{Binding Items}"
Background="LightSteelBlue">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal"
Margin="-2,0,0,0">
<Border Background="{Binding Path=Background, RelativeSource={RelativeSource AncestorType=ListBox}}"
Padding="10">
<Image Source="Save-icon.png"/>
</Border>
<TextBlock Margin="5,8,0,0"
Text="{Binding}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这是新的结果:
现在您需要做的就是更新ListBox的背景颜色,一切都会自动调整。例如
<ListBox Margin="20"
ItemsSource="{Binding Items}"
Background="PeachPuff">