C# 一个按钮上有多种样式和内容
我有一个C# 一个按钮上有多种样式和内容,c#,wpf,xaml,C#,Wpf,Xaml,我有一个主页,上面有许多按钮,我正在尝试做一些事情。首先,我在ResourceDictionary中有一个样式,它决定了按钮的整体“外观”。看起来是这样的: <Style TargetType="Button" x:Key="HomeButton"> <Setter Property="Foreground" Value="White"/> <Setter Property="Background" Value="#06658D"/>
主页
,上面有许多按钮,我正在尝试做一些事情。首先,我在ResourceDictionary
中有一个样式
,它决定了按钮的整体“外观”。看起来是这样的:
<Style TargetType="Button" x:Key="HomeButton">
<Setter Property="Foreground" Value="White"/>
<Setter Property="Background" Value="#06658D"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}" BorderBrush="White" BorderThickness="1">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Background" Value="White"/>
<Setter Property="Foreground" Value="#06658D"/>
</Trigger>
</Style.Triggers>
</Style>
<Button Grid.Row="0" Style="{StaticResource HomeButton}" Content="Contacts">
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding ContactsClicked}" Value="True">
<Setter Property="Background" Value="White"/>
<Setter Property="Foreground" Value="#06658D"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button>
没有什么太复杂的,但是我希望鼠标悬停效果在被点击后保持不变。因此,现在我正在考虑这样做:
<Style TargetType="Button" x:Key="HomeButton">
<Setter Property="Foreground" Value="White"/>
<Setter Property="Background" Value="#06658D"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}" BorderBrush="White" BorderThickness="1">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Background" Value="White"/>
<Setter Property="Foreground" Value="#06658D"/>
</Trigger>
</Style.Triggers>
</Style>
<Button Grid.Row="0" Style="{StaticResource HomeButton}" Content="Contacts">
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding ContactsClicked}" Value="True">
<Setter Property="Background" Value="White"/>
<Setter Property="Foreground" Value="#06658D"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button>
我将绑定按钮的command元素以设置ContactsClicked=true
,并在按下另一个按钮时重置此设置。但是,我得到的错误是内容设置了多次
是否可以设置按钮的整体样式
,以及“点击样式”和一次在按钮上显示文本的TextBlock,或者我的做法是错误的?我尽量不让每一个
按钮都有一个单独的整体风格,因为这是大量重复的代码
为清晰起见,这是我的目标:
我想将此作为评论添加,但我不允许这样做
如果您的目标是按钮单击后保持选中状态,为什么不使用单选按钮
?单选按钮
有一个名为IsChecked
的内置属性,但即使在多次单击后也将保持“选中”或“选中”
当然,您可以以类似的方式定义行为和样式,在属性IsChecked
上创建一个简单的Trigger
如果需要更多的解释,就这么说。我自己设法找到了一个解决方案,而不是使用按钮
us a切换按钮
:
<Style TargetType="ToggleButton" x:Key="HomeButton">
<Setter Property="Foreground" Value="White"/>
<Setter Property="Background" Value="#06658D"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Border Background="{TemplateBinding Background}" BorderBrush="White" BorderThickness="1">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="Black" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Background" Value="White"/>
<Setter Property="Foreground" Value="#06658D"/>
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Background" Value="White"/>
<Setter Property="Foreground" Value="#06658D"/>
</Trigger>
</Style.Triggers>
</Style>
谢谢您的回答:)。我还没有想过使用单选按钮
实际上,有没有可能用普通按钮的方式来设计它呢?例如,我是否可以删除表示是否选中的常用圆圈?我很难想象我怎么能把它设计成上面的样子。当然!你可以把任何东西设计成任何东西,按钮实际上是最简单的。以下是控件模板:。请小心删除不需要的内容。我可以给你一个完整的例子,如果需要的话,哇,这似乎是一个疯狂的代码量,只是为了我改变一个按钮的背景为白色时,点击!一定有更简单的方法…事实上,没有。相信我,我知道我在说什么。记住这一点,您应该删除我提到的大部分代码。所有与VisualStatesManager相关的内容都可以使用按钮。我正准备从你那里提出一些建议。不管怎样,很高兴你明白了:)