我修改了我的问题,因为它在尝试时改变了焦点。我将问题缩小到以下...
我尝试将 TreeView 的选定项绑定到 StackPanel(或其他可以容纳用户控件的容器)。然后,此容器将显示一个 UserControl,具体取决于所选项目的类型。
这是StackPanel的xaml(treeview和stackpanel都在同一个窗口==>不同的网格列)
<StackPanel Grid.Column="2" MinWidth="500" DataContext="{Binding ElementName=myTree, Path=SelectedItem, Mode=OneWay}">
<StackPanel.Resources>
<DataTemplate DataType="{x:Type mvTypes:MyTypeA}">
<controls:UserControlA DataContext="{Binding}" />
</DataTemplate>
<DataTemplate DataType="{x:Type mvTypes:MyTypeB}">
<controls:UserControlB DataContext="{Binding}" />
</DataTemplate>
</StackPanel.Resources>
</StackPanel>
当我将用户控件直接放在堆栈面板下(而不是在资源中)时,它会将所选对象显示为它们的数据上下文。同理,如果我在其中放置一个 TextBox,它将显示所选项目的正确类型。
<TextBox Name="textBox1" Text="{Binding}" />
出于某种原因,将其放在 DataTemplate 中(即使没有设置 DataType)也不会显示任何内容。
任何建议。我在想也许 StackPanel 不是正确的控件,尽管我似乎找不到其他看起来适合像这样的容器的控件。
提前致谢。