代码之家  ›  专栏  ›  技术社区  ›  Fermin

从代码隐藏在上下文菜单中设置图标图像源时出现问题

  •  1
  • Fermin  · 技术社区  · 14 年前

    我在一个用户控件中有一个DataGrid,我向DataGrid添加了一个ContextMenu。

    <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>
    

    如果我使用

    <Image x:Name="menuIcon" Source="../../Assets/Images/user_green.png"/>
    

    然后图标呈现良好,但如果我尝试在ContextMenu打开的事件处理程序中使用以下命令设置它:

    private void ContextMenu_Opened(object sender, RoutedEventArgs e)
    {
      menuIcon.Source = new BitmapImage(new Uri("../../Assets/Images/user_green.png", UriKind.Relative));
    }
    

    什么都没出现,我没有错误或者什么都没有。我用同样的方法在应用程序的其他地方设置了一个ImageSource(使用相同的实际*.png文件),你知道这里发生了什么吗?

    这是因为它是一个上下文菜单吗?在网格上?我搞不清发生了什么事。

    3 回复  |  直到 14 年前
        1
  •  2
  •   AnthonyWJones    14 年前

    尝试使用:-

     new Uri("/Assets/Images/user_green.png", UriKind.Relative")
    

    一般来说,我会尽量避免“父路径”,如果可能的话,它们只会引起头痛。您知道在Xap的根目录下有一个Assets文件夹,所以从“/Assets”开始并从那里开始。

        2
  •  2
  •   Fermin    13 年前

    我用一个 ImageSourceConverter

    private void ContextMenu_Opened(object sender, RoutedEventArgs e)
    {
      ImageSourceConverter converter = new ImageSourceConverter();
      menuIcon.Source = (ImageSource)converter.ConvertFromString("../../Assets/Images/user_green.png");
    }
    
        3
  •  2
  •   valveLondon    12 年前

    你必须传一张照片。这对我有效:

    var mus = new MenuItem {
    Header = "Unicorns...",
    Icon = new Image {
     Source = new BitmapImage(new Uri("/myApp;component/img/unicorns.png",UriKind.Relative))
    }
    };