我的问题可以简化为这个简化的例子:
<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
按钮。但如果IsSelected="True"
最初设置为第二个TabItem
,则CommandParameter
具有正确的值。
使用ContentTemplate
属性需要解决此问题。我也可以使用ContentControl
(但不是我的情况,因为ContentPresenter
在控件的样式模板中使用。)