我想在mouseEnter事件触发时更改元素的背景颜色。如何使背景颜色变暗?我以为我可以使用不透明蒙版,但它是渐变,但我需要它是坚固的。它也必须是可视化的基本代码,而不是xaml。 请帮帮我!
答案 0 :(得分:2)
不透明蒙版不是一个很好的选择,因为它修改了不透明度。此外,opacitymask可以是任何类型的画笔,它不必是渐变。
您可以执行以下两项操作之一:操纵当前画笔或在控件顶部添加黑色矩形并更改矩形的不透明度。
如果你让我知道你喜欢什么,我可以写一些代码。
(为什么它必须是代码而不是xaml?)
修改强>
<Window x:Class="TestWpfApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestWpfApplication"
Title="MainWindow"
Height="350"
Width="525">
<StackPanel>
<Grid>
<TextBox Background="Red"
FontSize="24" />
<Rectangle x:Name="overlay"
Fill="Black"
IsHitTestVisible="False"
Opacity="0" />
<Grid.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation To="0.9"
Duration="0:0:0.2"
Storyboard.TargetName="overlay"
Storyboard.TargetProperty="(Rectangle.Opacity)" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation To="0"
Duration="0:0:0.2"
Storyboard.TargetName="overlay"
Storyboard.TargetProperty="(Rectangle.Opacity)" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Grid.Triggers>
</Grid>
</StackPanel>
</Window>
答案 1 :(得分:1)
我可能会使用ValueConverter
。最近使用此转换器来改变不透明度:
public class ChangeColorOpacityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Color input = (Color)value;
input.A = byte.Parse((string)parameter); //Changes alpha to ValueConverterParameter
return input;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
您可以将其更改为使颜色变暗,例如将所有颜色通道分成两部分。
VC使用示例:
<Border>
<Border.Resources>
<vc:DarkenColorConverter x:Key="DarkenColorConverter"/>
</Border.Resources>
<Border.Background>
<SolidColorBrush Color="{Binding MyColor, Converter={StaticResource DarkenColorConverter}}"/>
</Border.Background>
</Border>
如果您使用参数,则需要将绑定中的值指定为ConverterParameter
。