У меня есть простая разметка, приведенная ниже. DataContext назначается во время выполнения.
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" MinHeight="5" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" MinHeight="5" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MinWidth="5" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" MinWidth="5" />
</Grid.ColumnDefinitions>
<Menu Name="GlobalMenu" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3">
<Menu.ItemContainerStyle>
<Style TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">
<Setter Property="Header" Value="{Binding Text}" />
<Setter Property="Icon">
<Setter.Value>
<Image Source="{Binding Image}" />
</Setter.Value>
</Setter>
<Setter Property="ItemsSource" Value="{Binding Children}" />
</Style>
</Menu.ItemContainerStyle>
</Menu>
</Grid>
Проблема в том, что значки пунктов меню отображаются только в первый раз. Таким образом, пункты меню все еще существуют, текст есть, я могу изменить текст пункта меню, изменив связанный объект DataContext, поэтому связывание обычно работает, но значок не рисуется. Поскольку значки немного больше, я замечаю, что не только значок не рисуется, но и элемент меню уменьшается в размере, как будто значка вообще нет.
Свойство Icon на связанном объекте выглядит следующим образом
public BitmapImage Image
{
get
{
byte[] image = _widget.CommandRelation.Command.Element.Image;
if (image == null)
{
return null;
}
BitmapImage bitmapImage = new BitmapImage();
using (MemoryStream stream = new MemoryStream(image))
{
bitmapImage.BeginInit();
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.StreamSource = stream;
bitmapImage.EndInit();
}
return bitmapImage;
}
}