我已经使用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;
}
对于单级菜单,它的工作方式类似于魅力,但子菜单基本上无法访问,因为只要用户点击顶级菜单就会触发事件。
欢迎任何工作实例。
答案 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