我将 TreeViewItems 插入 TreeView 控件并在插入时为每个控件设置样式。我正在分配不同的样式(在 XAML 中预定义),具体取决于我要插入的节点 (TreeViewItem) 的类型。一些样式包括 ContextMenu。
我的问题是我无法在 MenuItems 上使用 Click="MyHandler";我收到错误消息“根元素需要 ax:Class 属性来支持 XAML 文件中的事件处理程序。” 显然 Style 块中的所有元素都不是根元素。
任何建议都非常感谢。
XAML:
<Style x:Key="Terrain" TargetType="{x:Type TreeViewItem}">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Canvas Background="{DynamicResource Terrain_icon}" />
<TextBlock Text="{Binding}" />
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="Edit..." Click="MyHandler"/> <!-- Error -->
<MenuItem Header="Add..."/>
<MenuItem Header="Delete"/>
</ContextMenu>
</StackPanel.ContextMenu>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
C#:
private void InsertTerrainNode(object sender, System.Windows.RoutedEventArgs e)
{
// Add the new item under the first-level TreeViewItem
TreeViewItem tvi = myTree.ItemContainerGenerator.ContainerFromItem(myTree.Items[0]) as TreeViewItem;
TreeViewItem newTerrainNode = new TreeViewItem();
newTerrainNode.Header = "Terrain";
newTerrainNode.Style = (Style)this.FindResource("Terrain");
tvi.Items.Insert(0,newTerrainNode);
}