我在UserControl中有一个DataGrid,我已经将一个ContextMenu添加到DataGrid。
XAML如下:
<sdk:DataGrid ItemsSource="{Binding Path=GridSource}">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Binding="{Binding Path=Name, Mode=OneWay}" Header="Name"/>
<sdk:DataGridTextColumn Binding="{Binding Path=Number, Mode=OneWay}" Header="Number"/>
</sdk:DataGrid.Columns>
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu Opened="ContextMenu_Opened">
<toolkit:MenuItem IsEnabled="False">
<toolkit:MenuItem.Icon>
<Image x:Name="menuIcon"/>
</toolkit:MenuItem.Icon>
</toolkit:MenuItem>
<toolkit:Separator />
<toolkit:MenuItem Header="View Agent Route" Click="AgentRoute_Click"/>
<toolkit:MenuItem Header="Live Track" Click="LiveTrack_Click"/>
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
</sdk:DataGrid>
如果我使用
在XAML中设置menuIcon Image的来源<Image x:Name="menuIcon" Source="../../Assets/Images/user_green.png"/>
然后图标呈现正常但如果我尝试使用以下方法在ContextMenu_Opened事件处理程序中设置它:
private void ContextMenu_Opened(object sender, RoutedEventArgs e)
{
menuIcon.Source = new BitmapImage(new Uri("../../Assets/Images/user_green.png", UriKind.Relative));
}
没有任何显示,我没有收到错误或任何它不显示的内容。我使用相同的方法在我的应用程序的其他地方设置ImageSource(使用相同的实际* .png文件),任何想法在这里发生了什么?
这是因为它是一个ContextMenu吗?在网格上?我无法弄清楚发生了什么。
答案 0 :(得分:2)
尝试使用: -
new Uri("/Assets/Images/user_green.png", UriKind.Relative")
作为一般规则,如果可能的话,我会避免“......”父路径,它们只会引起头痛。你知道在Xap的根目录下有一个Assets文件夹,所以从“/ Assets”开始,然后从那里开始。
答案 1 :(得分:2)
我在contextmenu_opened事件中使用ImageSourceConverter使这个工作正常。
private void ContextMenu_Opened(object sender, RoutedEventArgs e)
{
ImageSourceConverter converter = new ImageSourceConverter();
menuIcon.Source = (ImageSource)converter.ConvertFromString("../../Assets/Images/user_green.png");
}
答案 2 :(得分:2)
您必须传入图像。这对我有用:
var mus = new MenuItem {
Header = "Unicorns...",
Icon = new Image {
Source = new BitmapImage(new Uri("/myApp;component/img/unicorns.png",UriKind.Relative))
}
};