在我的一个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.请指教.
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)
| 归档时间: |
|
| 查看次数: |
753 次 |
| 最近记录: |