WpfToolkit AutoCompleteBox ContextMenu无法正常工作

Den*_*nis 9 c# wpf wpftoolkit

在我的一个WPF项目中,我集成了WPF Toolkit的AutoCompleteBox控件.我需要一个自定义Context Menu的控件,我已添加一个使用该ContextMenu属性.不幸的是,它没有显示自定义创建的但显示默认值(即剪切,复制,粘贴剪切和复制为禁用).

为了重新创建问题,我创建了一个示例项目,窗口中包含2个控件Grid.

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <toolkit:AutoCompleteBox>
            <toolkit:AutoCompleteBox.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="Menu Item 1"></MenuItem>
                    <MenuItem Header="Menu Item 2"></MenuItem>
                </ContextMenu>
            </toolkit:AutoCompleteBox.ContextMenu>
        </toolkit:AutoCompleteBox>
        <TextBox Grid.Row="1" >
            <TextBox.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="Menu Item 1"></MenuItem>
                    <MenuItem Header="Menu Item 2"></MenuItem>
                </ContextMenu>
            </TextBox.ContextMenu>
        </TextBox>
    </Grid>
Run Code Online (Sandbox Code Playgroud)

这两个控件具有相同的功能ContextMenu,如果我运行解决方案,我可以看到创建的自定义ContextMenu工作正在工作TextBox而不是AutoCompleteBox.

此外,我将相同的上下文菜单设置为网格(父控件)并设置 ContextMenu="{x:Null}"为TextBox&AutoCompleteBox.现在ContextMenu继承,TextBox但不是AutoCompleteBox.

所以我的问题是,如何ContextMenu为AutoCompleteBox 创建自定义?如果它不是通过design(AutoCompleteBox),我如何添加ContextMenu到继承自定义的AutoCompleteBox控件AutoCompleteBox.请指教.

Roh*_*ats 1

AutoCompleteBox暴露dependency property TextBoxStyle你能做到的set to customize TextBox hosted inside AutoCompleteBox

另一种方法是提供您自己的模板,但我强烈反对,因为此 DP 是为了您想要的目的而明确提供的,即从外部自定义文本框。

使用自定义 ContextMenu 为 TextBox 创建样式,并将该模板应用到 TextBox 和 AutoCompleteBox 上。该示例工作正常 -

<Grid>
   <Grid.Resources>
      <Style x:Key="CustomStyle" TargetType="TextBox"
             BasedOn="{StaticResource {x:Type TextBox}}">
         <Setter Property="ContextMenu">
             <Setter.Value>
                <ContextMenu>
                    <MenuItem Header="Header1"/>
                    <MenuItem Header="Header2"/>
                 </ContextMenu>
             </Setter.Value>
         </Setter>
      </Style>
   </Grid.Resources>
   <Grid.RowDefinitions>
      <RowDefinition/>
      <RowDefinition/>
   </Grid.RowDefinitions>
   <toolkit:AutoCompleteBox TextBoxStyle="{StaticResource CustomStyle}"/>
   <TextBox Grid.Row="1" Style="{StaticResource CustomStyle}"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)