0

必要な機能の新しいコントロールを作成するように依頼されましたが、これを一般的かつ柔軟な方法で最適に実現する方法に本当に苦労しています。

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

このコントロールの場合、彼らはこのようにしたいと考えています。ノードをクリックすると、その子が親コンテナの左側に表示されます。

ペイントですばやく(超高速)図を作成しました...(笑わないでください、ひどいです!:))

これはそれがどのように見えるべきかです

したがって、アイテムの単一のリストから始めて、選択したアイテムの子を徐々に進めていく必要があります。

だから私の質問は本当に、あなたはこのようなものからどこから始めますか..?データ側は問題ありませんが、XAMLは私を本当に混乱させるビットです。何百もの子パネルに対応できるように、非常に汎用的である必要があります。

どんな助けでも素晴らしいでしょう。

乾杯。ste。

4

2 に答える 2

1

デザインタイムにユーザーコントロールと既知のバインディングを使用している場合-簡単ですが、カスタムコントロールとして-私は良い答えに非常に興味があります

ここに画像の説明を入力

私が言ったように、コレクションのバインディングと子レベルを知っていれば、これは簡単に行うことができます。しかし、それはおそらくカスタム コントロールを取得するための出発点です。

<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>
于 2012-05-03T11:01:27.023 に答える
0

Josh Smith のこの記事は、良い出発点です。

階層データ コントロールだけが必要な場合は、TreeView独自のコントロールをローリングせずに使用することをお勧めします。これは、おそらく思ったよりも複雑になるためです (選択、キーボード ナビゲーションなど)。

于 2012-05-03T08:50:32.687 に答える