0

我被要求为我们需要的功能创建一个新控件,我真的在努力研究如何以通用和灵活的方式最好地实现这一点。

基本上,该控件与树视图非常相似,您可以在其中单击一个节点,然后其子项将出现在该节点下方。

对于这个控件,他们想要这样 - 当您单击一个节点时,它的子节点会显示在父容器的左侧,依此类推。

我已经用油漆做了一个快速(超级快速)的图表......(请不​​要笑,这太可怕了!:))

这就是它的样子

因此,您应该从一个项目列表开始,然后逐步遍历所选项目的子项。

所以我的问题是真的,你从哪里开始这样的事情..?我对数据方面很好,但 XAML 确实让我感到困惑,它需要非常通用,以便它可以处理 100 个子面板

任何帮助都会很棒。

干杯。圣。

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 的这篇文章是一个很好的起点。

如果您只需要一个分层数据控件,则最好使用 aTreeView而不是滚动您自己的控件,因为它可能比您想象的要复杂(选择、键盘导航等)

于 2012-05-03T08:50:32.687 回答