如何更改按钮中文本块的样式

时间:2014-04-22 16:41:52

标签: wpf silverlight xaml winrt-xaml

我需要更改按钮内的文本块的样式..

这是我的两种风格:

        <Style x:Key="btnStyleLR" TargetType="TextBlock">
            <Setter Property="FontFamily" Value="Segoe UI Light" />
            <Setter Property="FontSize" Value="40" />
            <Setter Property="Padding" Value="0,20,0,20" />
        </Style>

            <Style x:Key="btnStyleLROverride" BasedOn="{StaticResource btnStyleLR}" TargetType="TextBlock">
            <Setter Property="FontSize" Value="10" />
            <Setter Property="Padding" Value="0,10,0,10" />
        </Style>

然后:

        <Style x:Key="btnLoginRegister" TargetType="Button">
            <Setter Property="Width" Value="400" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Grid>
                            <Border x:Name="brd"
                                    BorderBrush="Orange"
                                    BorderThickness="1"
                                    CornerRadius="6">

                                <TextBlock HorizontalAlignment="Center"
                                           Style="{TemplateBinding Tag}"
                                           Text="{TemplateBinding Content}" />
                            </Border>
                        </Grid>

                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

我在按钮pero的tag属性中绑定样式它不起作用。 然后我有两个按钮需要更改de textblock样式:

                    <Button x:Name="loginBtn"
                        Style="{StaticResource btnLoginRegister}"
                        Tag="btnStyleLROverride"
                        Content="Login" />

和另一个:

            <Button x:Name="registerBtn"
                Content="Register"
                Tag="btnStyleLR"
                Style="{StaticResource btnLoginRegister}" />

还有另一种方法来改变使用bind的样式吗?感谢

3 个答案:

答案 0 :(得分:2)

你不应该销毁这样的按钮模板,除非它只是出于这个问题的目的。解决问题的简单方法是简单地将TextBlock设置为按钮的内容,然后您可以在不破解模板的情况下更改其样式。

答案 1 :(得分:1)

Tag 中,您必须提供资源值,而不是字符串。它应该是:

<Button x:Name="loginBtn"
        Style="{StaticResource btnLoginRegister}"
        Tag="{StaticResource btnStyleLROverride}"
        Content="Login" />

对其他按钮也这样做。

答案 2 :(得分:0)

据我了解您的要求: 你有两个Buttons(“登录”和“注册”)需要在视觉上减少(不应该使用视觉状态),并且每个都有自己的“文本样式”(但可能共享基本样式)?它是否正确? 如果是这种情况,我建议使用两个不同的Button Styles(可能共享相同的基本样式):

<Button x:Name="loginBtn" Content="Login"
        Style="{StaticResource LoginButtonStyle}"/>
<Button x:Name="registerBtn" Content="Register"
        Style="{StaticResource RegisterButtonStyle}"/>

你的风格:

<Style x:Key="PlainButtonStyle" TargetType="Button">
    <Setter Property="FontFamily" Value="Segoe UI Light"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border BorderBrush="Orange" BorderThickness="1" CornerRadius="6">
                    <TextBlock Text="{TemplateBinding Content}"
                        Padding="{TemplateBinding Padding}"
                        HorizontalAlignment="Center"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<Style x:Key="LoginButtonStyle"
       BasedOn="{StaticResource PlainButtonStyle}" TargetType="Button">
    <Setter Property="FontSize" Value="10"/>
    <Setter Property="Padding" Value="0,10,0,10"/>
</Style>
<Style x:Key="RegisterButtonStyle"
       BasedOn="{StaticResource PlainButtonStyle}" TargetType="Button">
    <Setter Property="FontSize" Value="40"/>
    <Setter Property="Padding" Value="0,20,0,20"/>
</Style>

继承了FontSizeFontFamily等属性。