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. 背景顏色不改變
- 3. 改變背景顏色CSS3
- 4. jquery.Countdown - 改變背景顏色
- 5. 改變背景顏色onclick
- 6. 改變CardView背景顏色
- 7. Javascript改變背景顏色
- 8. ValueAnimator改變背景顏色
- 9. angularJS改變背景顏色
- 10. 改變mainwindow.xib背景顏色
- 11. 改變背景顏色
- 12. 改變背景顏色
- 13. 改變背景顏色
- 14. 基於背景顏色更改微調器文本顏色
- 15. 如何改變背景顏色和背景顏色?
- 16. 基於值的背景顏色褪色
- 17. 基於值動態改變表背景顏色
- 18. C#WPF - 基於背景圖像動態改變文本顏色
- 19. 逐漸改變基於滾動的背景顏色
- 20. 由於背景顏色而改變了按鈕顏色
- 21. 基於背景更改TextBlock前景色
- 22. 基於輸入更新背景顏色
- 23. DynamicJasper:基於值的背景顏色
- 24. Gridview基於gridview datakeyname的背景顏色
- 25. 基於值的顏色JQPlot背景
- 26. 基於%height的ImageView背景顏色
- 27. 在gtk 3.0中改變背景顏色
- 28. android改變背景顏色太慢
- 29. 改變cell.accessoryView和cell.editingAccessoryView的背景顏色
- 30. 身體背景顏色不會改變