使用静态资源在按钮图像上显示文本

时间:2017-02-01 09:18:17

标签: wpf xaml

这是我的按钮样式:

        <Style TargetType="local:Button" xmlns:local="clr-namespace:Terminal">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type local:Button}">
                        <Image x:Name="img" Source="{Binding DefaultImage,RelativeSource={RelativeSource TemplatedParent}, FallbackValue=img/0.png, TargetNullValue=img/0.png}" Stretch="Fill">
                        </Image>

                        <ControlTemplate.Triggers>
                            <Trigger Property="IsPressed" Value="true">
                                <Setter Property="Source" TargetName="img" 
                                        Value="{Binding PressedImage,RelativeSource={RelativeSource TemplatedParent}, FallbackValue=img/1_push.png, TargetNullValue=img/1_push.png}">
                                </Setter>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

我的按钮代码如下:

        <local:Button xmlns:local="clr-namespace:Terminal"  x:Name="btnLine" Grid.Column="1" Content="LINE"
                   DefaultImage="img/line.png" PressedImage="img/line_pushed.png" Click="btnLine_Click">
        </local:Button>

问题是按钮内容没有显示在图像上。我也尝试将TextBlock置于local:Button内,但仍然没有运气。如何显示按钮的内容?

1 个答案:

答案 0 :(得分:0)

您尚未定义文字应放在模板中的任何位置 - 您实际上只是告诉该按钮只是一张图片。

该按钮会添加&#39;内容&#39;在控件模板中的元素<ContentPresenter/>中。这是一个容易忽视的事情!所以你需要这样的东西:

    <Style TargetType="local:Button" xmlns:local="clr-namespace:Terminal">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:Button}">
                    <Grid>
                       <Image x:Name="img" Source="{Binding  DefaultImage,RelativeSource={RelativeSource TemplatedParent}, FallbackValue=img/0.png, TargetNullValue=img/0.png}" Stretch="Fill">
                       </Image>
                       <ContentPresenter/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsPressed" Value="true">
                            <Setter Property="Source" TargetName="img" 
                                    Value="{Binding PressedImage,RelativeSource={RelativeSource TemplatedParent}, FallbackValue=img/1_push.png, TargetNullValue=img/1_push.png}">
                            </Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>