自定义按钮未正确显示其内容

Custom Button doesn't show its content properly

好的,我在我的 WPF 项目的 .xaml 文件中创建了一个自定义按钮,我已经完成了所有操作,但是内容没有显示...C# 代码是默认的,没有任何改变,但这是我的 .xaml 代码:

<Button Name="TestButton" Content="TESTING" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="197,158,0,0" Height="30" Width="120">
            <Button.Template>
                <ControlTemplate>
                    <Image Height="30" Width="120" Stretch="Fill">
                        <Image.Style>
                            <Style TargetType="{x:Type Image}">
                                <Setter Property="Source" Value="/Resources/btn_primary_normal.png"/>
                                <Style.Triggers>
                                    <Trigger Property="IsMouseOver" Value="True">
                                        <Setter Property="Source" Value="/Resources/btn_primary_hover.png"/>
                                    </Trigger>
                                    <Trigger Property="IsEnabled" Value="False">
                                        <Setter Property="Source" Value="/Resources/btn_primary_disabled.png"/>
                                    </Trigger>
                                </Style.Triggers>
                            </Style>
                        </Image.Style>
                    </Image>
                </ControlTemplate>
            </Button.Template>
        </Button>

当您替换控件的 ControlTemplate 时,您替换了它的所有视觉功能,包括显示内容的部分 属性。如果您想要一个显示图像的按钮以及内容 属性 中的任何内容,您已经非常接近了,只需将 ContentPresenter 添加到您的模板中,如下所示:

<Button Name="TestButton" Content="TESTING" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="197,158,0,0" Height="30" Width="120">
        <Button.Template>
            <ControlTemplate TargetType="Button">
                <Grid>
                <Image Height="30" Width="120" Stretch="Fill">
                    <Image.Style>
                        <Style TargetType="{x:Type Image}">
                            <Setter Property="Source" Value="/Resources/btn_primary_normal.png"/>
                            <Style.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter Property="Source" Value="/Resources/btn_primary_hover.png"/>
                                </Trigger>
                                <Trigger Property="IsEnabled" Value="False">
                                    <Setter Property="Source" Value="/Resources/btn_primary_disabled.png"/>
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </Image.Style>
                </Image>
                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Grid>
            </ControlTemplate>
        </Button.Template>
    </Button>

还要注意 ControlTemplate 中 TargetType 的规范,这很重要。