【问题标题】:How can I stylize the text of a WPF button control?如何对 WPF 按钮控件的文本进行样式化?
【发布时间】:2014-12-25 01:26:11
【问题描述】:

使用过 FXML 并看到 FXML CSS 样式和 XAML ResourceDictionary 样式之间的相似之处。

使用 FXML,我能够设置按钮标签的样式,使其具有内阴影效果。

我正在尝试对 XAML 中的按钮做同样的事情。

我不需要确切的代码来实现样式,我只需要知道该代码在资源字典的标记中的位置。

如何设置 XAML 按钮文本的样式?

编辑

我要感谢 McGarnagle 让我朝着正确的方向前进: 这是我能想到的(感谢我从here 得到的一点)

<Style TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid>
                    <Grid.Resources>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="HorizontalAlignment" Value="Center"/>
                            <Setter Property="VerticalAlignment" Value="Center"/>
                        </Style>
                    </Grid.Resources>
                    <TextBlock Foreground="{DynamicResource{x:Static SystemColors.GrayTextBrushKey}}" Text="{TemplateBinding Content}">
                                <TextBlock.RenderTransform>
                                    <TranslateTransform X="-2" Y="-2" />
                                </TextBlock.RenderTransform>
                    </TextBlock>
                    <TextBlock Foreground="{TemplateBinding Foreground}" Text="{TemplateBinding Content}"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

【问题讨论】:

  • WPF 中没有“按钮的标签”之类的东西。 Java 的东西实际上是对 .Net 提供的设计不佳的模仿,就像 Java 中的其他所有东西一样。阅读 WPF Content ModelVisual Tree 以更好地了解 WPF UI 元素的组成方式。

标签: wpf xaml resourcedictionary


【解决方案1】:

您可以使用Effect 属性并添加DropShadowEffect 为任何元素添加效果。如果您只想模糊按钮内的文本,则必须覆盖控件模板。这是一个简单的例子:

<Style TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid>
                    <TextBlock Text="{TemplateBinding Content}">
                        <TextBlock.Effect>
                            <DropShadowEffect BlurRadius="2" />
                        </TextBlock.Effect>
                    <TextBlock>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

要重新创建带有阴影的默认按钮样式,只需复制粘贴default control template 并将阴影效果添加到内容元素即可。为此,您必须将 ContentPresenter 元素替换为 ContentControl

<ContentControl Margin="2"
                Content="{TemplateBinding Content}"
                ContentTemplate="{TemplateBinding ContentTemplate}"
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                >
    <ContentControl.Effect>
        <DropShadowEffect BlurRadius="3" />
    </ContentControl.Effect>
</ContentControl>

【讨论】:

  • 这与我的目标很接近,但并不准确。我正在寻找的是一种内阴影效果,其中文字看起来是雕刻的,而不是文字投射阴影。
  • @Will 嗯,他们曾经有“EmbossBitmapEffect”,但显然那已经过时了,没有什么可以替代它。您可以随时从这里劫持相关效果:wpffx.codeplex.com
  • 我在 Java2S 上发现了一些似乎正是我正在寻找的东西。我还没有测试过,但是java2s.com/Tutorial/CSharp/…
【解决方案2】:

页面而不是按钮,但我认为这就是您要问的。

<Page.Resources>
    <Style x:Key="GridHeaderStyleRight" TargetType="DataGridColumnHeader">
        <Setter Property="HorizontalContentAlignment" Value="Right"/>
        <Setter Property="Background" Value="LightGray" />
        <Setter Property="FontWeight" Value="Bold" />
        <Setter Property="Margin"  Value="4,4,4,4" />
    </Style>

【讨论】:

    【解决方案3】:

    这将为当前应用中使用的所有按钮自定义默认按钮样式:

    <Application.Resources>
        <ResourceDictionary>
            <Style x:Key="MyButtonStyle" TargetType="Button">
                <!-- Change whatever you want. -->
                <Setter Property="Foreground" Value="Blue"/>
                <Setter Property="FontSize" Value="15" />
                <Setter Property="Template">
                    <Setter.Value>
                         <!-- Custom Template -->
                    </Setter.Value>
                </Setter>
            </Style>
        </ResourceDictionary>
    </Application.Resources>
    

    【讨论】:

      猜你喜欢
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 1970-01-01
      • 2012-11-18
      • 2017-10-03
      • 1970-01-01
      相关资源
      最近更新 更多