我在下面給出了一個簡單的標記。 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>
的問題是,菜單項圖標只在第一次drwn。因此,菜單項仍然存在,文本在那裏,我可以通過更改綁定的DataContext對象來更改菜單項文本,所以綁定通常可以工作,但圖標未繪製。由於圖標稍大,我注意到不僅圖標沒有繪製,而且菜單項縮小,就像根本沒有圖標一樣。綁定對象上
圖標屬性看起來像這樣
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;
}
}
一開始就是嘗試調試圖像綁定。在Image綁定上放置一個調試值轉換器,並查看設置了什麼DataContext。 – lbergnehr
由於使用內存流被立即處理,我不確定您將StreamSource設置爲BitmapImage的方式是否正確,這意味着bitmapImage不再需要該流。 –
BitmapImage將不需要流,因爲我設置bitmapImage.CacheOption = BitmapCacheOption.OnLoad; – adontz