Wpf 使元素颜色变暗

Wpf 使元素颜色变暗,wpf,vb.net,Wpf,Vb.net,我想在mouseEnter事件触发时更改元素的背景色。如何使背景颜色变暗??我想我可以使用不透明度遮罩,但它是一个渐变,但我需要它是实心的。它还必须是visual basic代码,而不是xaml。 请帮帮我 不透明度遮罩不是一个很好的选项,因为它会修改不透明度。此外,不透明材质可以是任何类型的笔刷,而不必是渐变色 可以执行以下两种操作之一:操纵当前笔刷或在控件顶部添加黑色矩形,并更改矩形的不透明度 如果你让我知道你喜欢什么,我可以写一些代码 (为什么它必须是代码而不是xaml?) 编辑 <

我想在mouseEnter事件触发时更改元素的背景色。如何使背景颜色变暗??我想我可以使用不透明度遮罩,但它是一个渐变,但我需要它是实心的。它还必须是visual basic代码,而不是xaml。
请帮帮我

不透明度遮罩不是一个很好的选项,因为它会修改不透明度。此外,不透明材质可以是任何类型的笔刷,而不必是渐变色

可以执行以下两种操作之一:操纵当前笔刷或在控件顶部添加黑色矩形,并更改矩形的不透明度

如果你让我知道你喜欢什么,我可以写一些代码

(为什么它必须是代码而不是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>

我可能会为此使用一个。最近使用此转换器更改不透明度:

公共类ChangeColorOpacityConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
颜色输入=(颜色)值;
input.A=byte.Parse((字符串)参数);//将alpha更改为ValueConverterParameter
返回输入;
}
公共对象转换回(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
抛出新的NotSupportedException();
}
}
您可以更改此选项以使颜色变暗,例如,只需将所有颜色通道除以2即可


VC使用示例:



如果使用需要在绑定中将值指定为
ConverterParameter

确定的参数,可以给我演示一个使红色矩形变暗的示例吗?这两种选择有什么区别?似乎添加一个矩形会比较慢。它必须是在代码中,因为元素是以数字方式添加的。@Cobold:动态添加项目通常并不意味着您需要在WPF中编写代码才能正确显示它们。@H.B.那么如何将矩形的填充更改为仅在xaml中更暗,如果你没有任何东西可以设置属性?@Cobold:正如Erno所说,你可以使用覆盖,只有一个项目悬停在上面,因此在任何时间点上都只有一个额外的矩形。就性能而言,这应该不是什么大问题。我考虑了几个问题,因此调整了我的示例:覆盖不再捕获单击,鼠标的输入和离开现在附加到包含网格的事件。您能用visual basic“Color input=(Color)value;”编写吗?我找到了如何编写它的方法。但是它说:类“ChangeColorOpacityConverter”必须为接口“System.Windows.Data.IValueConverter”实现“函数转换(值作为对象,targetType作为类型,参数作为对象,区域性作为全球化.CultureInfo)”作为对象。请看我链接到的参考中的示例。我的回答中还添加了一个示例。不过,您可能希望通过触发器应用此选项。@H.B.谢谢您的努力,但我发现Erno情节提要更好。动画效果很好,因此,如果更改是动态的,则Erno的答案更可取(我的opcaity converter只更改了我的应用程序中的颜色一次,因此没有显示更改)。你可能已经注意到,你现在可以对答案进行投票(需要15次代表),所以如果你决定给我一些积分,你可以这样做。