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

覆盖wpf中按钮的默认视觉样式的简单工作示例,wpf,vb.net,button,Wpf,Vb.net,Button,我想为我的按钮创建自定义视觉样式。 我需要一个简单的工作示例,说明如何覆盖按钮的默认视觉样式。以及如何应用它的简单解释。 我想让一些东西发挥作用,这样我就可以从那里开始,进一步试验我的方法 我尝试添加一个新的追索权词典,如下所示: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2

我想为我的按钮创建自定义视觉样式。
我需要一个简单的工作示例,说明如何覆盖按钮的默认视觉样式。以及如何应用它的简单解释。 我想让一些东西发挥作用,这样我就可以从那里开始,进一步试验我的方法

我尝试添加一个新的追索权词典,如下所示:

<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>

当我尝试运行此操作时,出现一个错误,即无法找到“mstyle”资源。

在大多数情况下,您不需要任何代码来执行此操作,您所需要的只是定义一个自定义样式,以资源字典或窗口资源中的按钮为目标。示例:

 <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

  • 最后定义触发器来处理鼠标、单击和其他任何操作 否则,您需要在触发时设置自定义外观(例如 除盐/启用)
如何在这里使用这种风格

 <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>


嗯,我做错了什么。我打开了一个新的解决方案。我添加了一个新的追索权词典,并复制了您的示例。之后,我在主窗口的xaml中复制了按钮定义。按钮已生成,但具有默认样式,
style=“{StaticResource DarkStyleButton}”
作为错误突出显示,显示为:“无法解析追索权”DarkStyleButton。“您是否将资源dico添加到当前窗口/页面资源:是。”。就这样!非常感谢你!
 <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>