问题设置后台代码中的上下文菜单中的图标图像源

时间:2010-11-03 12:25:43

标签: silverlight image silverlight-4.0 contextmenu

我在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吗?在网格上?我无法弄清楚发生了什么。

3 个答案:

答案 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))
}
};