当它被绑定为ShellView工具栏中的按钮列表时,Caliburn Micro框架似乎不会检索我的SinglePaintToolbarView。我希望按钮只在将文本内容添加到工具栏时显示它们。但是,相反,我得到了这个:
工具栏中似乎没有任何可点击的按钮。我知道我的插件正在成功加载,因为我能够将列表中的一个插件绑定为ContentControl并且视图出现了。当我尝试绑定工具栏中的插件列表时,它似乎不起作用。
这就是我所拥有的:
ShellView.xaml
<UserControl x:Class="Starbolt.Views.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<ToolBarTray>
<ToolBar ItemsSource="{Binding Path=ToolbarPlugins}"/>
</ToolBarTray>
</Grid>
</UserControl>
ShellViewModel.cs
[Export(typeof(IShell))]
public class ShellViewModel : PropertyChangedBase, IShell
{
[ImportMany(typeof(IToolbarPlugin))]
private IEnumerable<IToolbarPlugin> _toolbarPlugins = null;
public IEnumerable<IToolbarPlugin> ToolbarPlugins { get { return _toolbarPlugins; } }
}
SinglePaintToolbarView.xaml
<UserControl x:Class="Starbolt.Plugin.SinglePaintTool.Views.SinglePaintToolView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="128" d:DesignWidth="32">
<Button Name="btnSinglePaintTool" Content="Single Paint Tool" Width="128" Height="32"/>
</UserControl>
SinglePaintToolViewModel.cs
[Export(typeof(IToolbarPlugin))]
public class SinglePaintToolViewModel : IToolbarPlugin
{
}
答案 0 :(得分:0)
基本上,您的设计似乎有效。如果你替换
<ToolBarTray>
<ToolBar x:Name="ToolbarPlugins"/>
</ToolBarTray>
(请注意,您不需要明确地绑定ItemsSource
,您也可以使用Caliburn Micro属性名称约定)以及以下内容:
<ListBox x:Name="ToolbarPlugins"/>
SinglePaintToolView
按钮按预期显示。
我怀疑问题出在ToolBar
ControlTemplate,这肯定会限制工具栏项目布局,而不是像ListBox
ControlTemplate那样。
所以我的猜测是,如果你真的想使用ToolBar
控件来显示你的IToolbarPlugin
视图,你可能需要在项目中设计一个专用的ToolBar
控件模板。
或者,您可以使用例如工具替换工具栏。 ListBox
。这可能是一个开始:
<ListBox x:Name="ToolbarPlugins">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>