2009-11-28 2 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 많은 MenuItem에 대한 this example 같은의로하지만 아무 소용이 주위를 연주했습니다.

도움을 주시면 감사하겠습니다.

답변

3

Separator 개체를 삽입하는 대신 Separator의 ControlTemplate (혼합에서 마우스 오른쪽 단추로 구분 기호 -> 템플릿 편집 -> 복사본 편집)을 잡고 단추 템플릿에 직접 통합 할 수 있습니다. DataTrigger를 사용하여 객체의 "BeginGroup"속성에 바인딩하는 가시성을 제어 할 수 있습니다.

컬렉션에 전용 Separator 개체가 필요하면 DataTemplateSelector를 사용할 수 있습니다.

4

나는 DataTemplateSelector 사용에 대한 Josh의 제안을 따랐고 다른 사람들을 돕기 위해 코드를 게시하려고합니다.

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