.net ContentPresenter中的RelativeSource返回null
我的问题可以简化为以下示例:.net ContentPresenter中的RelativeSource返回null,.net,wpf,.net,Wpf,我的问题可以简化为以下示例: <TabControl> <TabItem Header="first"> <Button Content="TestButton" /> </TabItem> <TabItem Header="second"> <ContentPresenter > <ContentPresenter.Content>
<TabControl>
<TabItem Header="first">
<Button Content="TestButton" />
</TabItem>
<TabItem Header="second">
<ContentPresenter >
<ContentPresenter.Content>
<Button x:Name="button"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=TabControl}}"
Content="CommandParameter is null" Click="OnButtonClick" />
</ContentPresenter.Content>
</ContentPresenter>
</TabItem>
</TabControl>
如果选择第二个选项卡,则按钮的CommandParameter=null
。但如果最初为第二个TabItem
设置了IsSelected=“True”
,则CommandParameter
具有正确的值
我需要使用ContentTemplate
属性来解决此问题。我还可以使用ContentControl
(但在我的情况下不行,因为ContentPresenter
是在控件的样式模板中使用的)
你真的不应该有
ContentPresenter
的样式。另外,ContentControl
s defaultContentTemplate
包含一个ContentPresenter
,因此我不明白为什么这会破坏样式。实际上,对于XAML内容,我根本不会使用ContentPresenter
,只在ControlTemplate
内部使用,对于MVVM viewmodels作为内容使用,DataTemplate
与DataType
匹配。实际上,不应该有ContentPresenter
的样式。另外,ContentControl
s defaultContentTemplate
包含一个ContentPresenter
,因此我不明白为什么这会破坏样式。实际上,对于XAML内容,我根本不会使用ContentPresenter
,只在ControlTemplate
内部使用,对于MVVM viewmodels,我将使用DataTemplate
和匹配的DataType
来显示内容。