0
Q
基于改变背景颜色
A
回答
2
XAML:
<Button Content="Color change" Background="{Binding BackGround}" Command="{Binding ButtonPressedCommand}">
<Button.Template>
<ControlTemplate TargetType="Button">
<Border Name="Border" Background="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background, Mode=OneWay}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" TargetName="Border"
Value="{Binding BackGroundOnHover}"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="False">
<Setter Property="Background" TargetName="Border"
Value="{Binding BackGround}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Button.Template>
</Button>
视图模型:
class MainViewModel : INotifyPropertyChanged
{
private Brush _backGround = new SolidColorBrush(Colors.Red);
public Brush BackGround
{
get { return _backGround; }
set
{
_backGround = value;
OnPropertyChanged();
}
}
private Brush _backGroundOnHover;
public Brush BackGroundOnHover
{
get
{
if (_backGroundOnHover == null)
SetHoverBackGround();
Debug.WriteLine(((SolidColorBrush)_backGroundOnHover).Color.R);
return _backGroundOnHover;
}
set
{
_backGroundOnHover = value;
OnPropertyChanged();
}
}
private RelayCommand _buttonPressedCommand;
public RelayCommand ButtonPressedCommand
{
get
{
return _buttonPressedCommand ??
(_buttonPressedCommand = new RelayCommand(SetBackgroundWhenButtonPressed));
}
}
private void SetBackgroundWhenButtonPressed()
{
var color = ((SolidColorBrush)BackGround).Color;
BackGround = new SolidColorBrush(Color.FromRgb((byte)(color.R - 5), color.G, color.B));
SetHoverBackGround();
}
private void SetHoverBackGround()
{
var color = ((SolidColorBrush)BackGround).Color;
BackGroundOnHover = new SolidColorBrush(Color.FromRgb((byte)(255-color.R), color.G, color.B));
}
public void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
每当你点击它改变背景颜色和颜色的同时,当鼠标悬停。
2
纯粹在XAML中的按钮样式。
首先定义两个SolidColorBrush
一个继承另一个color
,但第二刷的不透明度被定义。
<Window.Resources>
<SolidColorBrush x:Key="ButtonBrush" Color="red" />
<SolidColorBrush x:Key="shadedButtonBrush" Color="{Binding Source={StaticResource ButtonBrush}, Path=Color}" Opacity="0.5" />
<Style TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="custBorder" Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="custBorder" Property="Background" Value="{StaticResource shadedButtonBrush}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Button Background="{StaticResource ButtonBrush}">
Button
</Button>
如果你想改变按钮的颜色,只需改变ButtonBrush的颜色,一切都会自动调整。
相关问题
- 1. 基于php变量改变a:before元素的背景颜色
- 2. jquery.Countdown - 改变背景颜色
- 3. 改变背景颜色
- 4. 改变背景颜色onclick
- 5. 改变背景颜色
- 6. 基于背景颜色更改微调器文本颜色
- 7. 如何改变背景颜色和背景颜色?
- 8. 基于值动态改变表背景颜色
- 9. 逐渐改变基于滚动的背景颜色
- 10. 由于背景颜色而改变了按钮颜色
- 11. 基于背景更改TextBlock前景色
- 12. 基于输入更新背景颜色
- 13. DynamicJasper:基于值的背景颜色
- 14. For loop来改变背景颜色
- 15. 身体背景颜色不会改变
- 16. 用jQuery Mobile改变背景颜色
- 17. 我不能改变表背景颜色
- 18. .BackgroundColor不改变背景颜色
- 19. a:主动不改变背景颜色
- 20. 改变cell.accessoryView和cell.editingAccessoryView的背景颜色
- 21. UIPickerView背景颜色没有改变?
- 22. jQuery改变身体的背景颜色
- 23. 本地存储改变背景颜色
- 24. 设置背景颜色改变按钮
- 25. CSS:悬停改变的背景 - 颜色
- 26. 框架不改变背景颜色
- 27. 改变背景颜色,当触及
- 28. ASM改变CMD的背景颜色
- 29. Android - tabhost不改变背景颜色
- 30. 在gtk 3.0中改变背景颜色