TreeView の ContextMenu を作成したいと考えていました。ツリービュー XAML:
<helper:ExtendedTreeView Grid.Row="5" ItemsSource="{Binding OCFrage, Mode=TwoWay}" SelectedItem_="{Binding SelectedItem, Mode=TwoWay}" SelectedItemChanged="treeView1_SelectedItemChanged" x:Name="treeView1" Height="205" Width="215">
<helper:ExtendedTreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type model:T_Frage}" ItemsSource="{Binding Wertung, Mode=TwoWay}">
<TextBlock Text="{Binding Text}"/>
</HierarchicalDataTemplate>
</helper:ExtendedTreeView.Resources>
</helper:ExtendedTreeView>
helper:ExtendedTreeView はこのクラスです:
public class ExtendedTreeView : TreeView
{
public ExtendedTreeView()
: base()
{
this.SelectedItemChanged += new RoutedPropertyChangedEventHandler<object>(self);
}
void self(object sender, RoutedPropertyChangedEventArgs<object> e)
{
if (SelectedItem != null)
{
SetValue(SelectedItem_Property, SelectedItem);
}
}
public object SelectedItem_
{
get { return (object)GetValue(SelectedItem_Property); }
set { SetValue(SelectedItem_Property, value); }
}
public static readonly DependencyProperty SelectedItem_Property = DependencyProperty.Register("SelectedItem_", typeof(object), typeof(ExtendedTreeView), new UIPropertyMetadata(null));
}
これを使用して SelectedItem をバインドし、ViewModel で使用します。
私のTreeViewにはT_Frageタイプの「ヘッダー」があり、それらのノードはT_Wertungタイプであるため、次のようになります
- T_Frage
- T_ウェルトゥング
- T_ウェルトゥング
- T_Frage
- T_ウェルトゥング ...
ヘッダーの ContextMenu を作成したかったのです。したがって、ユーザーが T_Frage タイプの TreeViewItem をクリックすると、ContextMenu がポップアップするはずです。私はこのガイドhttp://canhandre.wordpress.com/2012/01/14/wpf-treeview-with-contextmenu/に従いました。現在、コードビハインドでテストするためだけに実行しています。問題は、このコードが実行されているTreeViewItem selectedItem = treeView1.SelectedItem as TreeViewItem;
ときです。
編集: ItemsSource を削除し、XAML で通常の TreeViewItems を作成する
<TreeViewItem Header="Edit" Name="Edit">
<TreeViewItem Header="Text"/>
<TreeViewItem Header="Image"/>
<TreeViewItem Header="Table"/>
</TreeViewItem>
ここに値を割り当てますTreeViewItem selectedItem = treeView1.SelectedItem as TreeViewItem;
。これは、T_Frage 型の TreeView の項目を TreeViewItem 型の変数に割り当てることができないことを意味します。TreeViewItem 型ではない TreeView の項目の ContextMenu を作成するにはどうすればよいですか? 上記のように、T_Frage の型を TreeViewItem に割り当てると、結果は null になります。