我有一个包含TreeView的UserControl。我希望用户能够通过XAML设置内部TreeView控件的属性,我不知道该怎么做。
我尝试在UserControl上创建一个公共属性到TreeView,但这只允许我设置一个SelectedItemChanged触发器。
我想做点什么:
<ExampleUserControl>
<ExampleUserControl.TreeView.ItemTemplate>
...
</ExampleUserControl.TreeView.ItemTemplate>
</ExampleUserControl>
或者:
<ExampleUserControl TreeView.ItemsSource="{Binding Foo}" />
我不希望在UserControl中为每个TreeView属性创建属性,我不想强迫用户在C#中定义控件。
答案 0 :(得分:0)
对于在用户控件中将多个属性传递给子控件,您始终可以公开Style属性。
即ChildStyle
对于ItemsSource,除非你使用[Josh Smith的Element Spy / Data Context Spy / Freezable] [1]技巧,否则你将在DataContexts上断开连接。
所以要么你使用这些技巧,要么只有2个属性。
1)ItemsSource 2)ChildStyle
xaml最终......
<ChildTreeAnswer:MyControl ItemsSource="{Binding Items}">
<ChildTreeAnswer:MyControl.ChildStyle>
<Style>
<Setter Property="ItemsControl.ItemTemplate">
<Setter.Value>
<DataTemplate>
<Border BorderBrush="Black"
BorderThickness="1"
Margin="5">
<TextBlock Text="{Binding }" />
</Border>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ChildTreeAnswer:MyControl.ChildStyle>
</ChildTreeAnswer:MyControl>
然后在你的用户控件中做...(为简单起见,我使用了一个列表框)
<ListBox ItemsSource="{Binding ItemsSource}"
Style="{Binding ChildStyle}" />