WPF-使用DataTemplates将数据绑定到StackPanel
我修改了我的问题,因为它在尝试时改变了焦点。 我把问题缩小到以下几点 我尝试将TreeView的选定项绑定到StackPanel(或可以容纳用户控件的其他容器)。然后,此容器将根据所选项目的类型显示UserControlWPF-使用DataTemplates将数据绑定到StackPanel,wpf,data-binding,datatemplate,Wpf,Data Binding,Datatemplate,我修改了我的问题,因为它在尝试时改变了焦点。 我把问题缩小到以下几点 我尝试将TreeView的选定项绑定到StackPanel(或可以容纳用户控件的其他容器)。然后,此容器将根据所选项目的类型显示UserControl <TextBox Name="textBox1" Text="{Binding}" /> 这是StackPanel的xaml(treeview和StackPanel都在同一个窗口==>不同的网格列) 当我将一个用户控件直接放在stackpanel下面(不在参考
<TextBox Name="textBox1" Text="{Binding}" />
这是StackPanel的xaml(treeview和StackPanel都在同一个窗口==>不同的网格列)
当我将一个用户控件直接放在stackpanel下面(不在参考资料中)时,它会显示它,并将所选对象作为其datacontext。
Idem如果我在其中放置一个文本框,它将显示所选项目的正确类型
<TextBox Name="textBox1" Text="{Binding}" />
出于某种原因,将其放置在数据模板中(即使没有设置数据类型)也不会显示任何内容
任何建议。我想StackPanel可能不是这个的合适控件,尽管我似乎找不到其他像这样的容器一样合适的控件
提前感谢。尽管您已经在第二个自定义控件上设置了绑定,但是您是否正在设置DataContext,因为绑定是到信息的路由,DataContext是它应用此绑定信息的信息
Andrew您可以创建一个用户控件,将树状视图和右侧的选择信息显示在一起。它使您不必创建任何自定义控件。自定义控件基本上是不必要的,因为您不创建以前不存在的任何东西
<UserControl x:Class="NameSpace.SelectionView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="namespace.Controls"
Height="300" Width="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TreeView Name="customTree">
<!--Items go here-->
</TreeView>
<StackPanel Grid.Column="1" MinWidth="50" DataContext="{Binding ElementName=customTree, Path=SelectedItem, Mode=OneWay}">
<StackPanel.Resources>
<DataTemplate DataType="{x:Type StylingTest:CustomViewModelA}">
<controls:CustomADetailsControl />
</DataTemplate>
<DataTemplate DataType="{x:Type StylingTest:CustomViewModelB}">
<controls:CustomBDetailsControl />
</DataTemplate>
</StackPanel.Resources>
<TextBlock Text="{Binding}"/>
</StackPanel>
</Grid>
</UserControl>
任何其他自定义行为,我相信您可以在此处创建或设置样式/模板
另外,你可能会发现我的另一个例子很有用
祝wpf好运,干杯。将示例中的StackPanel替换为ContentPresenter,而不是DataContext设置Content属性。应该可以。是的,在自定义控件中设置了datacontext,如下所示。。。(当然非常简化)ModelObject c=repo.GetByID(3295123);ViewModelTree vmt=新的ViewModelTree(c);base.DataContext=vmt;可能是因为我只绑定到用户控件的DataContext,而不是窗口,因此窗口中的其他控件看不到我吗?谢谢。这正是我现在一直试图实现的,只是直接在窗口xaml中实现(而不是用户控件)。虽然stackpanel中的detail(user)控件的选择不起作用,但TextBlock确实显示所选treeview项的类型。完全正确!DataContext没有任何意义,它只是用于绑定。内容属性是用来展示东西的。非常感谢。它工作得很好。关于为什么它不能使用StackPanel的任何输入?正如Oleg所说,DataContext本身并不意味着什么,它只是下面的任何绑定可以工作的地方。将其视为设置要查看的堆栈帧或变量范围。您需要的是实际创建一个绑定,并对其进行评估和显示,这就是ContentPresenter(用于单个项目)或ItemsPresenter(用于集合)的目的。尝试查找ContentPresenter和DataTemplates,看看它们实际上是如何交互的。我不知道有什么好的博客文章,但可能有一些。