如果我直接在Content Presenter上设置ContentTemplate
它可以正常工作,如果我使用Style
它会被覆盖:
内部按钮ControlTemplate
:
<ContentPresenter ContentTemplate="{StaticResource Default}"/>
VS
<ContentPresenter Style="{StaticResource MyContentStyle}"/>
工作正常:
<DataTemplate x:Key="Default">
<StackPanel>
<TextBlock>this is the</TextBlock>
<TextBlock>default view</TextBlock>
<TextBlock Text="{Binding}"></TextBlock>
</StackPanel>
</DataTemplate>
<ControlTemplate x:Key="ButtonTemplate" TargetType="Button">
<Grid Margin="20">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"
ContentTemplate="{StaticResource Default}"
/>
</Border>
</Grid>
</ControlTemplate>
</Grid.Resources>
<Button Template="{StaticResource ButtonTemplate}">Click Me</Button>
默认DataTemplate
未应用,它表示在可视树中被覆盖。
这是
默认视图
<Style x:Key="MyContentStyle" TargetType="ContentPresenter">
<Setter Property="ContentTemplate" Value="{StaticResource Default}"/>
</Style>
<ControlTemplate x:Key="ButtonTemplate" TargetType="Button">
<Grid Margin="20">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"
Style="{StaticResource MyContentStyle}"
/>
</Border>
</Grid>
</ControlTemplate>
</Grid.Resources>
<Button Template="{StaticResource ButtonTemplate}">Click Me</Button>
如果我独立于按钮使用ContentPresenter
,它可以正常工作:
<Grid>
<ContentPresenter Style="{StaticResource MyContentStyle}" Content="Work fine even with Style" />
</Grid>
答案 0 :(得分:1)
Button
有自己的ContentTemplate
属性。直接设置这个:
<Button Template="{StaticResource ButtonTemplate}" ContentTemplate="{StaticResource Default}">Click Me</Button>
或适用于Style
的{{1}}:
Button
答案 1 :(得分:0)
如果在ContentPresenter上设置了内容,则将应用样式。 因此,工作方式的解决方案是:
<ContentPresenter Content="{Binding Content, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource MyContentStyle}" />