简单的工作示例覆盖wpf中按钮的默认视觉样式

时间:2015-02-11 08:07:48

标签: wpf vb.net button

我想为我的按钮创建自定义视觉样式 我需要一个简单的工作示例,说明如何覆盖按钮的默认视觉样式。以及如何应用它的简单解释。 我希望得到一些有用的东西,所以我可以从那里开始并进一步尝试。

我试图添加一个新的追索字典如下:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<Style x:Key="mstyle" TargetType="Button">
    <Setter Property="FontWeight" Value="Bold" />
</Style>

</ResourceDictionary>
之后我在运行时创建了一个新按钮并尝试将此样式应用于它:

    Dim MyButton As New Button
    Dim st As New Style
    st = Application.Current.FindResource("mstyle")
    MyButton.Style = st

当我尝试运行时,我得到一个错误,即追索&#39; mstyle&#39;无法找到。

1 个答案:

答案 0 :(得分:1)

在大多数情况下,您根本不需要任何代码来完成所有操作,只需在资源字典或窗口资源中定义一个以按钮为目标的自定义样式,例如:

 <Style x:Key="DarkStyleButton" TargetType="{x:Type Button}">
    <Setter Property="Background" Value="#373737" />
    <Setter Property="Foreground" Value="White" />
    <Setter Property="FontFamily" Value="Segoe UI" />
    <Setter Property="FontSize" Value="12" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border CornerRadius="4" Background="{TemplateBinding Background}">
                    <Grid>
                        <ContentPresenter x:Name="MyContentPresenter" Content="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0" />
                    </Grid>
                </Border>

                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="#E59400" />
                        <Setter Property="Foreground" Value="White" />
                    </Trigger>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter Property="Background" Value="White" />
                        <Setter Property="Foreground" Value="Black" />
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="Background" Value="Gray" />
                        <Setter Property="Foreground" Value="LightGray" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
  • 首先设置要自定义的属性的值,

  • 然后设置按钮模板,不要忘记添加 ContentPresenter将保存按钮内容

  • 最后定义触发器来处理鼠标,点击和什么 否则你想在触发时设置自定义外观(例如 desable / enabled)

在这里使用那种风格

 <Button  x:Name="BrowseButton" Margin="5"  Style="{StaticResource DarkStyleButton}" ToolTip="tooltip about the button">
                    <Button.Content>
                        <StackPanel Orientation="Horizontal">
                            <Image Source="../BrowseImage.png"/>
                            <TextBlock Text="Browse" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5"></TextBlock>
                        </StackPanel>
                    </Button.Content>
                </Button>