gpt4 book ai didi

c# - WPF:使带有 Treeview 的 UserControl 表现得像 Vanilla Treeview

转载 作者:行者123 更新时间:2023-11-30 20:52:27 26 4
gpt4 key购买 nike

我正在学习 WPF,但我认为我在用户控件方面遗漏了一些东西。我将尝试通过示例进行演示。基本上,假设我有一个 TreeView ,并且我想将标签文本绑定(bind)到 TreeView selectedItem。这看起来很简单:

<!-- Window.xaml -->
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="100" />
</Grid.RowDefinitions>

<TreeView Name="MyTreeView">
<TreeViewItem Header="Root">
<TreeViewItem Header="Item1"></TreeViewItem>
<TreeViewItem Header="Item2"></TreeViewItem>
</TreeViewItem>
</TreeView>

<Label Content="{Binding ElementName=MyTreeView, Path=SelectedItem.Header}" Grid.Row="1"></Label>
</Grid>

现在,为了使事情复杂化,我将在组合中添加一个用户控件。用户控件基本上是网格中的 TreeView :

<!-- ExampleUserControl.xaml -->
<UserControl>
<Grid>
<TreeView Name="UserControlTreeView">
<TreeViewItem Header="Root">
<TreeViewItem Header="Item1"></TreeViewItem>
<TreeViewItem Header="Item2"></TreeViewItem>
</TreeViewItem>
</TreeView>
</Grid>
</UserControl>

目的是用用户控件替换上面使用的 Vanilla TreeView ,并根据所选内容更改标签内容。所以,我尝试这样的事情:

<Window>    
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="100" />
</Grid.RowDefinitions>

<local:ExampleUserControl1 x:Name="MyUserControl">
</local:ExampleUserControl1>

<Label Content="{Binding ElementName=MyUserControl, Path=SelectedItem.Header}" Grid.Row="1"></Label>
</Grid>
</Window>

这会编译并运行,但是当我在 TreeView 中选择项目时,标签不会改变。我想我明白为什么:用户控件包含 TreeView ,但显然不是 TreeView 。我不确定解决此问题的最佳方法。我能想到一种似乎有问题的方法:

  • 在代码中向用户控件添加属性“SelectedItem”,返回 TreeView 中的选定项。

这适用于一个或几个属性,但对 TreeView 中的每个属性都这样做的想法似乎是对代码和时间的严重浪费。有什么方法可以继续使用用户控件,但使其表现得像普通的 TreeView 吗?

最佳答案

不能像这样从外部访问子控件。一种方法是在代码中为 SelectedItem 设置包装器属性,并从您已经提到的外部绑定(bind)到它。

但我建议使用 UserControl 的 Tag 属性来包含 TreeView 的引用并从外部绑定(bind)到 Tag 属性。这样您就不必在代码隐藏中创建多个属性。

使用x:Reference绑定(bind)到 TreeView:

<UserControl Tag="{Binding Source={x:Reference UserControlTreeView}}">
<Grid>
<TreeView Name="UserControlTreeView">
<TreeViewItem Header="Root">
<TreeViewItem Header="Item1"></TreeViewItem>
<TreeViewItem Header="Item2"></TreeViewItem>
</TreeViewItem>
</TreeView>
</Grid>
</UserControl>

现在绑定(bind)标签控件:

<Label Content="{Binding ElementName=MyUserControl,
Path=Tag.SelectedItem.Header}"/>

关于c# - WPF:使带有 Treeview 的 UserControl 表现得像 Vanilla Treeview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20863156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com