工具栏ItemsSource尚未解析视图

时间:2012-06-26 02:07:50

标签: c# .net caliburn.micro caliburn

当它被绑定为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
{

}

1 个答案:

答案 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>