WPF自定义控件指南 - 水平树

时间:2012-05-03 08:44:23

标签: c# wpf wpf-controls

我被要求为我们需要的功能创建一个新的控件,我真的很挣扎如何以通用和灵活的方式实现这一目标。

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

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

我在油漆中做了一个快速(超快速)的图表...(请不​​要笑,它太可怕!:)

this is how it should look

因此,您应该从一个项目列表开始,然后通过所选项目的子项进行渐进式..

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

任何帮助都会很棒。

欢呼声。 STE。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

This article from Josh Smith是一个很好的起点。

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