c# - 使用 ControlTemplate 覆盖 XAML WPF 中的按钮不显示内容

标签 c# wpf xaml

我是 XAML 新手,正在查看此博客

http://jeremybytes.blogspot.com/2009/03/wpf-xaml-sample.html

他提到“请注意,它们没有任何内容(Button1a、Button1b 等)。这是因为我们的模板不包含内容元素。”我想弄清楚如何确保即使在应用新按钮模板后内容仍然存在。这是 XAML

<Page.Resources>
    <ControlTemplate TargetType="Button" x:Key="targetButton">
        <Canvas Width="100" Height="100" Name="mainCanvas">
            <Rectangle Height="100" Width="100" Fill="Aqua" Canvas.Top="1"/>     
        </Canvas>
    </ControlTemplate>        
    <Style TargetType="Button">
        <Setter Property="Margin" Value="5, 5, 5, 5"/>            
        <Setter Property="Template" Value="{StaticResource targetButton}"/>
    </Style>
</Page.Resources> 
<StackPanel DataContext="{Binding Board}">
    <StackPanel Orientation="Horizontal">
        <Button Name="testButton1a" Click="testButton1a_Click" Content="testButton1a"/>
        <Button Name="testButton1b" Click="testButton1a_Click" Content="testButton1b"/>
        <Button Name="testButton1c" Click="testButton1a_Click" Content="testButton1c"/>
    </StackPanel>
    <StackPanel Orientation="Horizontal">
        <Button x:Name="testButton2a" Click="testButton1a_Click" Content="testButton2a"/>
        <Button x:Name="testButton2b" Click="testButton1a_Click" Content="testButton2b"/>
        <Button x:Name="testButton2c" Click="testButton1a_Click" Content="testButton2c"/>
    </StackPanel>
    <StackPanel Orientation="Horizontal">
        <Button Name="testButton3a" Click="testButton1a_Click" Content="testButton3a"/>
        <Button Name="testButton3b" Click="testButton1a_Click" Content="testButton3b"/>
        <Button Name="testButton3c" Click="testButton1a_Click" Content="testButton3c"/>
    </StackPanel>
</StackPanel>

我尝试在模板中添加一个 TextBlock,但我看到相同的文本 block 覆盖在所有按钮上。我只想渲染显示在矩形按钮矩阵上的 testButton* 内容,这样我就可以在单击后更改内容。

谢谢,任何帮助将不胜感激

最佳答案

您可以使用ContentPresenter 来显示内容:

<ControlTemplate TargetType="Button" x:Key="targetButton">
   <Canvas Width="100" Height="100" Name="mainCanvas">
      <Rectangle Height="100" Width="100" Fill="Aqua" Canvas.Top="1"/>
      <ContentPresenter/>
   </Canvas>
</ControlTemplate>

关于c# - 使用 ControlTemplate 覆盖 XAML WPF 中的按钮不显示内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16393135/

相关文章:

.net - WPF MenuItem ViewModel 命令

wpf - 在 XAML 中将控件从 MM 转换为英寸

c# - 查询表时Azure表过滤器和Linq有什么区别?

c# - 有没有办法告诉编译器将始终执行特定代码块?

c# - 在 Asp.Net 方法中,如何使用 EF 从表中删除行?

c# - 将 Collection 绑定(bind)到 ListView,抑制对象的重复但操作 ListViewItem

c# - VisualStyleRenderer 到位图

c# - 如何在 wpf c# 中播放双音频电影

c# - WPF MouseDown 事件不会在控件中的任何地方触发

silverlight - x : prefix in XAML when naming an element? 的目的是什么