我被要求为我们需要的功能创建一个新的控件,我真的很挣扎如何以通用和灵活的方式实现这一目标。
基本上控件与树视图非常相似,您可以点击某个节点,然后其子节点将出现在该节点下面。
对于这个控件,他们想要这样 - 当你点击一个节点时,它的子节点会显示在父容器的左边,依此类推。
我在油漆中做了一个快速(超快速)的图表...(请不要笑,它太可怕!:)
因此,您应该从一个项目列表开始,然后通过所选项目的子项进行渐进式..
所以我的问题是,你从哪里开始这样的事情......?我对数据方面很好但是XAML真的让我很困惑,它需要非常通用,所以它可以应对100个儿童面板
任何帮助都会很棒。
欢呼声。 STE。
答案 0 :(得分: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>
答案 1 :(得分:0)
This article from Josh Smith是一个很好的起点。
如果您只需要一个分层数据控件,最好使用TreeView
而不是自己控制,因为它可能比您想象的更复杂(选择,键盘导航等)