相关疑难解决方法(0)

寻找模块的Prism示例将自己加载到菜单中

有没有人知道使用Prism的WPF代码示例,其中每个模块在另一个模块的菜单中将自己注册为menuitem?

(我目前有一个应用程序尝试使用EventAggregator执行此操作,因此一个模块侦听来自其他模块的已发布事件,这些模块需要在菜单中将其标题作为菜单项,但我遇到了订单问题加载和线程等​​我想找到一个使用经典Prism结构来做这个的例子.)

我在考虑这个问题:

Shell.xaml:

<DockPanel>
    <TextBlock Text="Menu:" DockPanel.Dock="Top"/>
    <Menu 
        Name="MenuRegion" 
        cal:RegionManager.RegionName="MenuRegion" 
        DockPanel.Dock="Top"/>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)

合同视图:

<UserControl x:Class="ContractModule.Views.AllContracts"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <MenuItem Header="Contracts">
    </MenuItem>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

客户观点:

<UserControl x:Class="CustomerModule.Views.CustomerView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <MenuItem Header="Customers">
    </MenuItem>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

但是要知道我已经完成了非Prism MVVM应用程序结构,并且Menus总是很好地绑定到ViewModel中的ObservableCollections,上面似乎打破了这个漂亮的模式.以上是在Prism中做到这一点的习惯方式吗?

wpf containers prism bootstrapper

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

如何动态地将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 ×2

wpf ×2

bootstrapper ×1

containers ×1