Проблема с настройкой источника изображения значка в контекстном меню из кода - PullRequest
1 голос
/ 03 ноября 2010

У меня есть DataGrid в UserControl, и я добавил 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>

Если я установил источник менюIcon Imageв XAML с использованием

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

2 голосов
/ 23 февраля 2011

Я получил эту работу, используя ImageSourceConverter в событии contextmenu_opened.

private void ContextMenu_Opened(object sender, RoutedEventArgs e)
{
  ImageSourceConverter converter = new ImageSourceConverter();
  menuIcon.Source = (ImageSource)converter.ConvertFromString("../../Assets/Images/user_green.png");
}
2 голосов
/ 03 апреля 2012

Вы должны передать изображение.Это сработало для меня:

var mus = new MenuItem {
Header = "Unicorns...",
Icon = new Image {
 Source = new BitmapImage(new Uri("/myApp;component/img/unicorns.png",UriKind.Relative))
}
};
2 голосов
/ 03 ноября 2010

Попробуйте использовать: -

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

Как правило, я бы избегал ".." родительских путей, если это вообще возможно, они вызывают только головные боли. Вы знаете, что в корне Xap есть папка Assets, поэтому начните с "/ Assets" и перейдите оттуда.

...