2017-05-15 5 views
0

트리보기 메뉴가 아니라 애니메이션 축소/축소 된 중첩 섹션이있는 아코디언 스타일처럼 보이는 메뉴를 원합니다. 처음에는 트리 뷰에 내 목록을 할당했습니다. & 트리가 제대로 그려지기 때문에 다음으로 (https://www.codeproject.com/Articles/248112/Templating-WPF-Expander-Control을 사용하여) 아코디언 스타일을 프로토 타입 할 수 있었지만 지금은 트리에 사용 된 목록을 사용하여 메뉴를 동적으로 만들고 싶습니다. 나는 WPF에 익숙하다. 뷰에 트리 모양의리스트를 바인딩하는 것이 옳다. 그래서 나는 Expander와 Stackpanels를 C#으로 만들 것이다. 템플릿이 확장기에 할당되지 않았습니다. 내 부분 xaml.cs 코드 : 내 프로토 타입WPF C# 트리 목록의 익스팬더 메뉴

private void CreateMenu(PageViewModel n) 
    { 
     doRecurseTree(n, MenuStack); 
    } 

    private void doRecurseTree(PageViewModel n, StackPanel sp) 
    { 
     foreach (PageViewModel c in n.Children) 
     { 
      if (c.Children.Count() > 0) 
      { 
       Console.WriteLine("<expander header='"+c.Name+"'><stackpanel>"); 

       Expander ex = new Expander(); 
       ex.OverridesDefaultStyle = true; 
       ex.Header = c.Name; 
       ex.HorizontalAlignment = HorizontalAlignment.Left; 
       ex.VerticalAlignment = VerticalAlignment.Top; 
       ex.Template = /*"{StaticResource RevealExpanderTemp}"*/; 

       StackPanel spc = new StackPanel(); 


       doRecurseTree(c, spc); 
       Console.WriteLine("</stackpanel></expander>"); 
      } 
      else 
      { 
       Console.WriteLine("<button content='" + c.Name+"' />"); 
       Button b = new Button(); 
       b.Content = c.Name; 
       sp.Children.Add(b); 
      } 
     } 

    } 

XAML은 다음과 같습니다 뷰에서 솔루션을 C#에서 템플릿을 할당하거나 수행하는 방법에 대한

  <Expander Template="{StaticResource RevealExpanderTemp}" 
      OverridesDefaultStyle="True" 
      Header="Option 1" 
      HorizontalAlignment="Left" 
      VerticalAlignment="Top" 
      > 
      <StackPanel> 
       <Expander Template="{StaticResource RevealExpanderTemp}" 
       OverridesDefaultStyle="True" 
       Header="Sub Option 1" 
       HorizontalAlignment="Left" 
       VerticalAlignment="Top" 
       > 
        <StackPanel> 
          <Button Content="Item 1.1" Style="{StaticResource TestContentStyle}"/> 
          <Button Content="Item 1.2" Style="{StaticResource TestContentStyle}"/> 
          <Button Content="Item 1.3" Style="{StaticResource TestContentStyle}"/> 
          <Button Content="Item 1.4" Style="{StaticResource TestContentStyle}"/> 
        </StackPanel> 
       </Expander> 

       <Expander Template="{StaticResource RevealExpanderTemp}" 
       OverridesDefaultStyle="True" 
       Header="Sub Option 2" 
       ... 

아이디어는 매우 환영합니다. 사전에

감사합니다, 스티브

답변

0

글쎄, 나는 더 많은 검색 후 쉽게 템플릿 스타일의 문제를 해결했다. 스타일을 조회하여 적용해야합니다.

ex.Template = (ControlTemplate)FindResource("RevealExpanderTemp");