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