2009-06-01 6 views
4

ObjectDataProvider와 DataTemplate을 사용하여 메뉴 바 안에 MenuItem을 채 웁니다. (WPF, C#/XAML) 아래 snipet을 참조하십시오.WPF MenuItem 자식이 표시되지 않습니다.

결과 : 최상위 메뉴 항목이 나타납니다. 클릭하면 묶음 메뉴 항목 (바운드 된 머리글 텍스트가있는 항목)이 작은 화살표와 함께 표시되지만 아이를 나타내지 만 화살표를 가리키거나 클릭하면 표시되지 않습니다. 아이들에게 보여 주면 접근 할 수 없습니다.

예상 결과 : 어린이가 보이고 올바르게 동작합니다.

발췌문 : 메뉴 항목 컨트롤의

<ObjectDataProvider x:Key="Brokers" ObjectInstance="{x:Static brokers:BrokerManager.Instance}" MethodName="GetBrokers" IsAsynchronous="True" /> 
     <DataTemplate x:Key="BrokerMenuItem" DataType="IBroker"> 
      <MenuItem Header="{Binding Path=Name}"> 
       <MenuItem Header="Connect" /> 
       <MenuItem Header="Disconnect" /> 
      </MenuItem> 
     </DataTemplate> 

<MenuItem Header="Brokers" ItemsSource="{Binding Source={StaticResource Brokers}}" ItemTemplate="{DynamicResource BrokerMenuItem}"/> 

답변

0

일주일 넘게 검색 한 후 마침내 제대로 작동하는 방법을 발견했습니다. DataTemplates가 동적 메뉴에 너무 잘 작동하지 않는 것으로 나타났습니다. 이 작업을 수행하는 올바른 방법은 MenuItem의 ItemContainerStyle 속성을 사용하는 것입니다. (아니면 ItemStyleContainer입니까?)

스타일을 만들어 헤더를 무시하고 필요한 값으로 설정하기 만하면됩니다. 나는 아이들을 포함시키기 위해 ItemsSource를 무효화했다. 그러나 아이들이 스타일을 상속하고 각각이 같은 자식을 가지며 재귀 메뉴를 생성하므로 여기에서주의하십시오. 당신은 자녀의 ItemsSource를 오버라이드하고 빈 x : Array 등과 같이 설정해야합니다.

ItemContainerStyle을 사용하는 방법을 설명하는 몇 가지 블로그가 나와 있습니다.

0

ItemSource 속성이 해당 항목에 대한 childes을주는 데 사용됩니다, 그 DataTemplate을 함께 <ContentPresenter />를 사용하려고합니다.

1

arsenmrkt : 정확히 같은 문제가 있습니다. DataTemplate을 사용하여 MenuItem을 채우면 생성 된 항목에 어린이를 추가하는 것처럼 보입니다. 나는 당신의 대답을 이해하지 못한다. 어떻게이 문제를 해결하기 위해 ContentPresenter를 사용해야합니까?

편집 : 실제로 컬렉션에서 컬렉션을 메뉴에 바인딩하려고하기 때문에 사실 내 문제는 정확히 동일하지 않습니다. 나는 내가 HierarchicalDataTemplate을 사용하지만 작동하도록을받은 것 같아요 :

<Menu> 
    <MenuItem Header="{Binding Name}" ItemsSource="{Binding MenuOptions}"> 
     <MenuItem.ItemTemplate> 
      <HierarchicalDataTemplate ItemsSource="{Binding Categories}"> 
       <MenuItem Header="{Binding Name}"/> 
       <HierarchicalDataTemplate.ItemTemplate> 
        <DataTemplate> 
         <MenuItem Header="{Binding Name}"/> 
        </DataTemplate> 
       </HierarchicalDataTemplate.ItemTemplate> 
      </HierarchicalDataTemplate> 
     </MenuItem.ItemTemplate> 
    </MenuItem> 
</Menu> 

이 도움이 당신 NicholasF합니까?

관련 문제