Wpf 可编辑组合框覆盖我的上下文菜单

Wpf 可编辑组合框覆盖我的上下文菜单,wpf,combobox,contextmenu,Wpf,Combobox,Contextmenu,我用XAML实现了一个可编辑的组合框,它应该显示我自己的上下文菜单: <ComboBox IsEditable="True" ContextMenu="{StaticResource contextMenu}" ContextMenuClosing="contextClosing"> <ComboBoxItem Content="Item1" /> <ComboBoxItem Content="Item2" /

我用XAML实现了一个可编辑的
组合框
,它应该显示我自己的上下文菜单:

<ComboBox IsEditable="True"
          ContextMenu="{StaticResource contextMenu}"
          ContextMenuClosing="contextClosing">
    <ComboBoxItem Content="Item1" />
    <ComboBoxItem Content="Item2" />
</ComboBox>
<ComboBox IsEditable="True" ContextMenuService.ShowOnDisabled="True" 
     Name="combobox" Loaded="combobox_Loaded">
     <ComboBox.ContextMenu>
         <ContextMenu>
            <MenuItem Header="test"></MenuItem>
         </ContextMenu>
     </ComboBox.ContextMenu>
     <ComboBoxItem Content="Item1"></ComboBoxItem>
     <ComboBoxItem Content="Item2"></ComboBoxItem>
</ComboBox>  

 private void combobox_Loaded(object sender, RoutedEventArgs e)
 {
   (VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(combobox, 0), 2) as TextBox).ContextMenu = combobox.ContextMenu;
 }  

但是它没有显示我的上下文菜单,而是显示编辑上下文菜单(带有剪切、复制和粘贴)


是否有方法覆盖可编辑上下文菜单?

必须加载可编辑零件的文本框以覆盖标准上下文菜单:

<ComboBox IsEditable="True"
          ContextMenu="{StaticResource contextMenu}"
          ContextMenuClosing="contextClosing">
    <ComboBoxItem Content="Item1" />
    <ComboBoxItem Content="Item2" />
</ComboBox>
<ComboBox IsEditable="True" ContextMenuService.ShowOnDisabled="True" 
     Name="combobox" Loaded="combobox_Loaded">
     <ComboBox.ContextMenu>
         <ContextMenu>
            <MenuItem Header="test"></MenuItem>
         </ContextMenu>
     </ComboBox.ContextMenu>
     <ComboBoxItem Content="Item1"></ComboBoxItem>
     <ComboBoxItem Content="Item2"></ComboBoxItem>
</ComboBox>  

 private void combobox_Loaded(object sender, RoutedEventArgs e)
 {
   (VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(combobox, 0), 2) as TextBox).ContextMenu = combobox.ContextMenu;
 }  

已加载私有无效组合框(对象发送方,路由目标)
{
(VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(combobox,0),2)作为文本框);
}  

必须加载可编辑零件的文本框以覆盖标准上下文菜单:

<ComboBox IsEditable="True"
          ContextMenu="{StaticResource contextMenu}"
          ContextMenuClosing="contextClosing">
    <ComboBoxItem Content="Item1" />
    <ComboBoxItem Content="Item2" />
</ComboBox>
<ComboBox IsEditable="True" ContextMenuService.ShowOnDisabled="True" 
     Name="combobox" Loaded="combobox_Loaded">
     <ComboBox.ContextMenu>
         <ContextMenu>
            <MenuItem Header="test"></MenuItem>
         </ContextMenu>
     </ComboBox.ContextMenu>
     <ComboBoxItem Content="Item1"></ComboBoxItem>
     <ComboBoxItem Content="Item2"></ComboBoxItem>
</ComboBox>  

 private void combobox_Loaded(object sender, RoutedEventArgs e)
 {
   (VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(combobox, 0), 2) as TextBox).ContextMenu = combobox.ContextMenu;
 }  

已加载私有无效组合框(对象发送方,路由目标)
{
(VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(combobox,0),2)作为文本框);
}  

2021年,这仍然是一个问题!dontcare观察得非常好,必须加载组合框才能修改其中的部分内容。但是,您可以通过以下方式访问文本框部分,而不是浏览可视化树:

private TextBox cmbTextBox 
{ 
   get { return GetTemplateChild("PART_EditableTextBox") as TextBox; }
}  

2021年,这仍然是一个问题!dontcare观察得非常好,必须加载组合框才能修改其中的部分内容。但是,您可以通过以下方式访问文本框部分,而不是浏览可视化树:

private TextBox cmbTextBox 
{ 
   get { return GetTemplateChild("PART_EditableTextBox") as TextBox; }
}