小编Mat*_*dan的帖子

如何动态地将MenuItems(带标题)添加到WPF菜单

[编辑#3] - 阅读此问题的任何人:在任何情况下都不要使用此问题中概述的方法. 这是一个编码恐怖片.我很自然地承认这一点,因为我知道所有的程序员都曾在过去的一个角落里工作过(尤其是在学习新技术的时候),我们都被其他善意的开发人员误入歧途.首先阅读罗伯特的答案,然后阅读这个问题.请.

[编辑#2b]

我为这个问题的长度道歉 - 这里有一个问题(最后!),但我想确保源代码是明确的.无论如何.

[编辑#2] - 问题标题更改为更准确地反映...问题.

[编辑] - 我已经更新了一些关于我如何最终得到我在这里做的设计/代码的历史:强制性博客文章.如果它有助于澄清下面的问题,请随时阅读它...

原始问题

我正在使用的应用程序使用Prism和WPF,其中包含许多模块(目前为3个),其中一个模块承载应用程序菜单.最初,菜单是静态的,并且挂钩到CompositeCommand/DelegateCommands,这非常适合将按钮按下到适当的演示者.每个MenuItem在其标题中使用StackPanel将内容显示为图像和文本标签的组合 - 这就是我想要的样子:

<Menu Height="48" Margin="5,0,5,0" Name="MainMenu" VerticalAlignment="Top" Background="Transparent">
                <MenuItem Name="MenuFile" AutomationProperties.AutomationId="File">
                    <MenuItem.Header>
                        <StackPanel>
                            <Image Height="24" VerticalAlignment="Center" Source="../Resources/066.png"/>
                            <ContentPresenter Content="Main"/>
                        </StackPanel>
                    </MenuItem.Header>
                    <MenuItem AutomationProperties.AutomationId="FileExit" Command="{x:Static local:ToolBarCommands.FileExit}">
                        <MenuItem.Header>
                            <StackPanel>
                                <Image Height="24" VerticalAlignment="Center" Source="../Resources/002.png"/>
                                <ContentPresenter Content="Exit"/>
                            </StackPanel>
                        </MenuItem.Header>
                    </MenuItem>
                </MenuItem>
                <MenuItem  Name="MenuHelp" AutomationProperties.AutomationId="Help" Command="{x:Static local:ToolBarCommands.Help}">
                    <MenuItem.Header>
                        <StackPanel>
                            <Image Height="24" VerticalAlignment="Center" Source="../Resources/152.png"/>
                            <ContentPresenter Content="Help"/>
                        </StackPanel>
                    </MenuItem.Header>
                </MenuItem>               
            </Menu>
Run Code Online (Sandbox Code Playgroud)

不幸的是,应用程序变得有点复杂,并且希望其他模块在菜单中注册自己 - 因此,我一直在考虑使菜单动态化.目标是让其他模块(通过服务)能够随意向菜单添加命令 - 例如,模块A将在工具栏模块中添加一个菜单项,该模块调用模块A中的处理程序.有一些优秀的文章关于这个主题 …

wpf prism

9
推荐指数
1
解决办法
1万
查看次数

标签 统计

prism ×1

wpf ×1