2017-05-15 11 views
0

ツリービューメニューではなく、アニメーションの折り畳み/展開のネストされたセクションを含むメニューをアコーディオンスタイルのようにしたいと考えています。最初はツリービューにリストを割り当てました&ツリーは正しく描画されていましたので、次にアコーディオンスタイル(https://www.codeproject.com/Articles/248112/Templating-WPF-Expander-Controlを使用)のプロトタイプを作成できましたが、ツリーに使用されているリストを使って動的にメニューを作成します。私はWPFを初めて使っているので、木のようなリストをビューにバインドすることで正しい方法でやっているので、私はExpanderとStackpanelsをC#で作成することにしました。私は、テンプレートをエキスパンダーに割り当てることができませんでした。私の部分xaml.csコード:C#でテンプレートを割り当てるか、またはビューでソリューションを行う方法についてのアイデアは非常に歓迎されているWPF 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" 
       ... 

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私の試作品では、次のようになります。事前に

おかげで、 スティーブ

答えて

0

はまあ、私はより多くの検索後に簡単にテンプレートのスタイルの問題を解決しました。スタイルをルックアップして適用する必要があります。

ex.Template = (ControlTemplate)FindResource("RevealExpanderTemp"); 
関連する問題