2012-06-26 6 views
2

Кажется, что структура Caliburn Micro извлекает мой SinglePaintToolbarView, когда он привязан как список кнопок на панели инструментов ShellView. Я бы хотел, чтобы кнопки отображали только текстовое содержимое, когда они добавлены в панель инструментов. Но вместо этого я получаю это:Просмотр не разрешается с помощью элементов панели инструментов. Источник

Там не наблюдается никаких интерактивные кнопки на панели инструментов. Я знаю, что мои плагины загружаются успешно, потому что я смог связать один из плагинов в списке как 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

В принципе, ваш дизайн, кажется, работает. Если заменить

<ToolBarTray> 
    <ToolBar x:Name="ToolbarPlugins"/> 
</ToolBarTray> 

(обратите внимание, что вам не нужно, чтобы связать ItemsSource в явном виде, вы можете точно также использовать Caliburn Micro конвенции имя свойства) со следующим:

<ListBox x:Name="ToolbarPlugins"/> 

кнопку SinglePaintToolView отображается по назначению.

Я подозреваю, что проблема с ToolBarControlTemplate, что, безусловно, ограничивает элементы панели инструментов компоновки больше, чем, например, ListBoxControlTemplate делает.

Итак, я предполагаю, что если вы действительно хотите использовать элемент управления ToolBar, чтобы отобразить свои IToolbarPlugin просмотров, вам, вероятно, придется разработать выделенный шаблон управления ToolBar в вашем проекте.

В качестве альтернативы вы можете реализовать замену панели инструментов, например, ListBox. Это может быть пуск:

<ListBox x:Name="ToolbarPlugins"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 
+0

Да, похоже, это то, что мне нужно будет сделать, чтобы использовать ToolBar. Однако решение ListBox отлично работает для меня. Когда я получу время, я буду исследовать больше на ControlTemplate. –