2012-05-03 18 views
0

必要な機能の新しいコントロールを作成するように求められましたが、これを一般的かつ柔軟な方法で最大限に達成するには本当に苦労しています。WPFカスタムコントロールガイダンス - 水平ツリー

基本的に、コントロールはツリービューと非常によく似ています。ここで、ノードをクリックするとそのノードの下に子が表示されます。

このコントロールでは、このようにしたいと思います。ノードをクリックすると、その子は親コンテナの左側に表示されます。

私は塗料中の迅速な(スーパー速い)図をやった...(その恐ろしい笑いしないでください!:))

this is how it should look

だからあなたは1つだけで起動する必要があります項目のリストを選択し、次に選択した項目の子どもをプログレッシブにします。

私の質問は本当にこのようなものから始まりますか?私はデータ面でうまくいっているが、XAMLは本当に混乱しているビットなので、非常に一般的なので、子ども用パネルの100に対応できる可能性がある。

どんな助けも素晴らしいだろう。

歓声。 ste。

+0

ユーザーがアイテムAをクリックすると、アイテムcサブツリーはまだ開いていますか? – blindmeis

+0

@blindmeis - 最初は単一の列でなければなりません。その後、アイテムAをクリックすると、アイテムAの子が表示されます。子から別のアイテムを選択すると、別のパネルが表示されます。 – Steoates

+0

ツリービューの通常の動作は、あなたがクリックした各ノードを展開することです、なぜ私は尋ねます。たびにレベルを1つだけ増やしたい場合 – blindmeis

答えて

1

あなたの場合ユーザーコントロールの後であり、設計時にバインディングが知られている - それは簡単だろうが、カスタムコントロールとして - あなたが知っている場合、私は、これは簡単に行うことができます言ったように、私は良い答え

enter image description here

に非常に興味コレクションのバインディングと子レベルです。カスタムコントロールを手に入れることができます。

<UserControl> 
<UserControl.Resources> 
    <Style x:Key="{x:Type ListBox}" TargetType="{x:Type ListBox}"> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="BorderThickness" Value="0"/> 
     <Setter Property="ItemContainerStyle"> 
      <Setter.Value> 
       <Style TargetType="ListBoxItem"> 
        <Setter Property="VerticalContentAlignment" Value="Stretch"></Setter> 
       </Style> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="ItemsPanel"> 
      <Setter.Value> 
       <ItemsPanelTemplate> 
        <UniformGrid Columns="1"/> 
       </ItemsPanelTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
    <DataTemplate DataType="{x:Type local:TreeItems}"> 
     <Grid VerticalAlignment="Stretch"> 
      <Border BorderBrush="Black" BorderThickness="1" > 
       <TextBlock Margin="5" Text="{Binding Name}"/> 
      </Border> 
     </Grid> 
    </DataTemplate> 
</UserControl.Resources> 
<StackPanel Orientation="Horizontal"> 
    <ListBox x:Name="root" ItemsSource="{Binding}"></ListBox> 
    <ListBox x:Name="Lvl1" ItemsSource="{Binding ElementName=root, Path=SelectedItem.Childs}" /> 
    <ListBox x:Name="Lvl2" ItemsSource="{Binding ElementName=Lvl1, Path=SelectedItem.Childs}" /> 
</StackPanel> 
</UserControl> 
0

This article from Josh Smithです。

あなたが必要とするすべての階層データコントロールである場合、おそらくあなたが(選択、キーボードナビゲーションなど)を考えるよりも複雑であるとして、あなたはより良い、TreeViewはなく、独自の制御を転がりを使用