1

アイコン付きのコンテキストメニューの表示に問題がRadContextMenuあります。コンテキストメニュー項目(テキストとアイコン)を含む監視可能なコレクションへの動的バインディングを使用しています。このチュートリアル「動的バインディング」に従っています。以下はXAMLです。

<!-- Context Menu Resources Start-->
    <Style x:Key="MenuItemStyle" TargetType="{x:Type telerik:RadMenuItem}">
            <Setter Property="Icon">
                <Setter.Value>
                    <Image Source="{Binding IconPath, Converter={StaticResource pathtoimage}}" />
                </Setter.Value>
            </Setter>
        </Style>

        <HierarchicalDataTemplate x:Key="MenuItemTemplate">
            <telerik:RadButton Content="{Binding Title}" HorizontalContentAlignment="Left" Background="Transparent" BorderBrush="Transparent" />
        </HierarchicalDataTemplate>

<!-- Context Menu Resources End -->

以下は、コンテキストメニューが配置されるRadGridViewのXAMLです。

<telerik:RadGridView x:Name="myGridView" AutoGenerateColumns="False" ItemsSource="{Binding GridData}" VerticalAlignment="Top">
        <telerik:RadGridView.Columns>
            <telerik:GridViewDataColumn DataMemberBinding="{Binding Result}" Header="Result"/>
            <telerik:GridViewDataColumn DataMemberBinding="{Binding Category}" Header="Category"/>
        </telerik:RadGridView.Columns>
        <telerik:RadContextMenu.ContextMenu>
            <telerik:RadContextMenu ItemsSource="{Binding ContextMenuItems}" ItemContainerStyle="{StaticResource MenuItemStyle}" ItemTemplate="{StaticResource MenuItemTemplate}">                 
            </telerik:RadContextMenu>

ビューモデルは次のとおりです

class MainViewModel
{
    private ObservableCollection<MenuItemObj> menuitems_;
    public ObservableCollection<MenuItemObj> ContextMenuItems
    {
        get
        {
            return menuitems_;
        }
        set
        {
            menuitems_ = value;
        }
    }

    private ObservableCollection<GridRowDataObj> griddata_;
    public ObservableCollection<GridRowDataObj> GridData
    {
        get
        {
            return griddata_;
        }
        set
        {
            griddata_ = value;
        }
    }
}

public class MenuItemObj
{
    public string Title { get; set; }
    public string IconPath { get; set; }
}

public class GridRowDataObj
{
    public string Result { set; get; }
    public string Category { set; get; }
}

DataContextを次のように設定します

//TODO
        ObservableCollection<GridRowDataObj> gd = new ObservableCollection<GridRowDataObj>();
        gd.Add(new GridRowDataObj() { Result = "Primary School", Category = "SSC" });
        gd.Add(new GridRowDataObj() { Result = "Higher School", Category = "HSSC" });
        gd.Add(new GridRowDataObj() { Result = "Higher School", Category = "HSSC" });

        //TODO
        ObservableCollection<MenuItemObj> mi = new ObservableCollection<MenuItemObj>();
        mi.Add(new MenuItemObj() { Title = "My Item 1", IconPath = "/Images/item1.png" });
        mi.Add(new MenuItemObj() { Title = "My Item 2", IconPath = "/Images/item2.png" });
        mi.Add(new MenuItemObj() { Title = "My Item 3", IconPath = "/Images/item3.png" });

        MainViewModel mvm = new MainViewModel();
        mvm.ContextMenuItems = mi;
        mvm.GridData = gd;

        this.DataContext = mvm;

しかし、コードを実行すると、これが得られます

コードの出力

1番目と2番目のメニュー項目のアイコンが表示されない理由がわかりません。アイコンが最後のメニュー項目にのみ表示されることを確認しました。私はこのシナリオを複製する完全なプロジェクトを持っています、誰かがそれを必要とするならば、彼/彼女はそれを求めることができますか?、私を助けてください?

4

2 に答える 2

1

Telerikサポートフォーラムに質問を投稿し、ここで実用的な解決策を入手しました。

RadContextMenuアイコンの問題

于 2012-08-31T07:58:52.463 に答える
0

画像リソースにx:Shared = "False"を追加して、アイコンごとに新しい画像が作成されるようにします。

<Setter.Value>
    <Image Source="{Binding IconPath, Converter={StaticResource pathtoimage}}" x:Shared="False" />
</Setter.Value>
于 2013-03-20T13:51:29.017 に答える