在WPF功能区应用程序菜单中使用DataTemplate时,会出现其他嵌套级别

Jea*_*nal 4 .net wpf ribbon datatemplate

我正在使用Microsoft提供的WPF功能区控件.

问题在于,当我使用DataTemplate填充a时RibbonApplicationSplitMenuItem,我得到一个额外的嵌套级别,我认为不应该存在.

以下是相关的WPF代码:

<Window.Resources>
    <DataTemplate DataType="{x:Type cfg:PluginInfoConfigurationElement}" x:Key="GotoPluginAppMenuItem">
        <ribbon:RibbonApplicationMenuItem 
                                Header="{Binding Path=Key}"
                                ImageSource="{Binding Path=Image}"/>
    </DataTemplate>
</Window.Resources>

            <ribbon:RibbonApplicationMenu>
                <ribbon:RibbonApplicationSplitMenuItem x:Name="LoadPluginMenuItem" 
                   ItemsSource="{Binding Source={StaticResource NlpModel}, Path=AvailablePlugins}" 
                   Header="Plugins"
                   ItemTemplate="{StaticResource GotoPluginAppMenuItem}">
                </ribbon:RibbonApplicationSplitMenuItem>
                <ribbon:RibbonApplicationSplitMenuItem x:Name="LoadPluginMenuItem2" 
                                                       Header="Plugins">
                    <ribbon:RibbonApplicationMenuItem 
                                Header="FooPlugin"
                                ImageSource="Images/icon-32.png"/>
                    <ribbon:RibbonApplicationMenuItem 
                                Header="Invalid"
                                ImageSource="Images/icon-32.png"/>
                </ribbon:RibbonApplicationSplitMenuItem>
                <!-- Other items to fill the menu -->
            </ribbon:RibbonApplicationMenu>
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

使用DataTemplate http://img571.imageshack.us/img571/9915/screentemplate.png 使用数据模板.

我想要什么http://img43.imageshack.us/img43/9168/screendesired.png 没有模板.

如您所见,使用DataTemplate时会出现额外的嵌套级别.我怎么能防止这种情况?

Tom*_*eld 8

而不是设置ItemTemplate你需要设置ItemContainerStyle否则你最终得到了ribbon:RibbonApplicationMenuItem内部ribbon:RibbonApplicationMenuItem.

Jean Hominal:这是我用过的代码,它实现了我想要的结果:

<Style TargetType="{x:Type ribbon:RibbonApplicationMenuItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <ribbon:RibbonApplicationMenuItem Header="{Binding Path=Caption}"
                                                  ImageSource="{Binding Path=Image}"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

  • 我希望你不介意我根据你的答案添加我写的代码. (2认同)