2009-11-28 82 views
0

當我綁定一個ToolBar以命令視圖模型對象的集合。集合中的對象有一個屬性IsSeparator,當真正的我想與在ToolBar一個<Separator/>表示。如何插入工具欄分隔結合的ItemSource

我的基本標記看起來是這樣的:

<ToolBar Grid.Row="1" ItemsSource="{Binding Path=ToolBarCommands}"> 
    <ToolBar.ItemTemplate> 
     <DataTemplate> 
      <Button ToolTip="{Binding Path=ToolTip}" Command="{Binding Path=Command}"> 
       <Button.Content> 
        <Image Width="16" Height="16" Source="{Binding Path=IconStream}"/> 
       </Button.Content> 
      </Button>      
     </DataTemplate> 
    </ToolBar.ItemTemplate> 
</ToolBar> 

我打得四處ItemContainerStyle多像this exampleMenuItem秒,但無濟於事。

任何幫助表示讚賞。

回答

3

而不是插入分隔符的對象,你可以只搶分離器的控件模板(在Blend中,右鍵單擊一個分隔符 - >編輯模板 - >編輯副本),並直接將其納入你的按鈕模板。您可以使用DataTrigger來控制其可見性,可能綁定到對象上的「BeginGroup」屬性。

如果您希望您的收藏在一個專門的分離對象,您可以使用DataTemplateSelector。

4

我跟約什的有關使用DataTemplateSelector建議,我只是要發佈代碼,以幫助他人。

public class ToolBarItemTemplateSelector : DataTemplateSelector 
{ 
    public DataTemplate ButtonTemplate { get; set; } 
    public DataTemplate SeparatorTemplate { get; set; } 

    public override DataTemplate SelectTemplate(object item, DependencyObject container) 
    { 
     var toolBarItem = (ToolBarItemViewModel) item; 
     Debug.Assert(toolBarItem != null); 
     if (!toolBarItem.IsSeparator) 
     { 
      return ButtonTemplate; 
     } 
     return SeparatorTemplate; 
    } 
} 

    <DataTemplate x:Key="buttonTemplate" DataType="{x:Type infrastructure:ToolBarItemViewModel}"> 
     <Button Command="{Binding Command}" ToolTip="{Binding ToolTip}" Style="{DynamicResource ResourceKey={x:Static ToolBar.ButtonStyleKey}}"> 
      <Image Source="{Binding ImageSource}" Width="16" Height="16" /> 
     </Button> 
    </DataTemplate> 

    <DataTemplate x:Key="separatorTemplate"> 
     <Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" /> 
    </DataTemplate> 

    <local:ToolBarItemTemplateSelector ButtonTemplate="{StaticResource buttonTemplate}" SeparatorTemplate="{StaticResource separatorTemplate}" x:Key="toolBarItemTemplateSelector" /> 


<ToolBar AutomationProperties.AutomationId="toolBar" ItemsSource="{Binding ToolBarItems}" x:Name="toolBar" Band="1" BandIndex="1" ItemTemplateSelector="{StaticResource toolBarItemTemplateSelector}"/> 
+0

這幫助我,謝謝。事實證明,當您動態添加工具欄項目並使用DataTemplateSelector時,您需要明確指定分隔符的樣式。在DataTemplate中簡單地編寫''會導致分隔符不顯示。 – pbalaga