C# - WPF& MEF菜单点击操作

时间:2018-02-09 12:09:12

标签: c# wpf mef

我已经使用ASP.NET一段时间了,我对WPF不太熟悉,但我最近收到了构建模块化WPF应用程序的要求,我有点卡住了,我不确定这个功能是否是可能的。

要求是每个插件都应该包含自己的菜单和用户控件。每个模块必须将其自己的菜单和用户控件动态加载到主窗口中。我可以轻松加载菜单,但我遇到问题的部分是在主窗口中显示用户控件。

我设法让菜单打开一个包含控件的新窗口,但要求是应用程序中的所有交互必须在主应用程序窗口中进行,并且在任何情况下我们都不能打开其他窗口。

有没有人可能有一个如何使用MEF实现这个目标的实例?

目前我的MainWindow中有以下XAML用于加载菜单,但这种方法的问题在于它与子菜单不兼容。

    <Grid Name="MainGrid">
    <DockPanel Margin="0,0,0,289">
        <Menu DockPanel.Dock="Top" ItemsSource="{Binding}">
            <Menu.ItemTemplate>
            <HierarchicalDataTemplate DataType="{x:Type plugins:IPlugin}" ItemsSource="{Binding Path=Menu.Items}">
                <TextBlock Text="{Binding Menu.Header}" MouseUp="TextBlock_MouseUp" />
            </HierarchicalDataTemplate>
        </Menu.ItemTemplate>
        </Menu>
    </DockPanel>
    <ContentPresenter Name="contentPresenter" Margin="0,30,0,0">

    </ContentPresenter>
</Grid>

上面的例子,&#34; MouseUp&#34;事件用于然后使用以下内容加载用户控件:

private void TextBlock_MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        var textBlock = (TextBlock)sender;
        var plugin = (IPlugin)textBlock.DataContext;
        contentPresenter.Content = plugin.Control;
    }

对于单级菜单,它的工作方式类似于魅力,但子菜单基本上无法访问,因为只要用户点击顶级菜单就会触发事件。

欢迎任何工作实例。

1 个答案:

答案 0 :(得分:0)

您应该将public static class ViewHolder extends RecyclerView.ViewHolder { LinearLayout rootView;//newly added field public ViewHolder(View view) { super(view); rootView=(LinearLayout)view.findViewById(R.id.rootView); } } 的{​​{1}}属性绑定到项目视图模型上的Command

MenuItem