あなたの問題は、WPF がListBoxの各項目をレンダリングする方法が原因です。各項目をListBoxItemにラップするItemContainerStyleを使用します。表示されるコンテンツを含むのはこのListBoxItemです (この場合、Image と TextBlock を含む StackPanel)。
デフォルトでは、ListBoxItemは、表示するすべてのコンテンツを囲む青い四角形を表示します。
私は解決策を思いつきましたが、それはハックです。画像を大きくし、背景のピクセルの色をリストボックスの背景色(私の場合は白) と一致させ、次の 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では、バインディングを使用して親のListBoxから背景色を取得するBorderで画像を囲みました。(画像の周囲に境界線がなくなりました)。
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">