#230 – 当鼠标悬停在控件上时修改其放射渐变RadialGradientBrus(Changing a Radial Gradient as Mouse Moves Over a Control)

2016-08-22 19:16:50来源:CSDN作者:Libby1984人点击

下面是一个根据鼠标移动事件修改放射渐变画刷的例子。

在XAML中定义的放射渐变画刷()

<Button x:Name="btnActiveGradient" Content="Click Me" Width="120" Height="30" Margin="30"    MouseMove="btnActiveGradient_MouseMove"    MouseLeave="btnActiveGradient_MouseLeave"    Style="{DynamicResource ButtonStyle1}" >    <Button.Background>        <RadialGradientBrush x:Name="gradRadial" RadiusX="0.25">            <GradientStop Color="AliceBlue" Offset="0.0"/>            <GradientStop Color="LightSteelBlue" Offset="1.0"/>        </RadialGradientBrush>    </Button.Background></Button>

我们还需要禁止系统默认的当鼠标悬停在按钮上时显示的样式。我们可以通过设置ButtonChrome 实例的RenderMouseOver 属性为false来达到这个目的(ButtonChrome 实例在按钮的控件模板中可以找到)。

最后。给MouseMoveMouseLeave 事件添加代码,用来当鼠标移动的是改变放射渐变的源点和中心点。

private void btnActiveGradient_MouseMove(object sender, System.Windows.Input.MouseEventArgs e){    Point pt = Mouse.GetPosition(btnActiveGradient);    gradRadial.GradientOrigin = new Point(pt.X / btnActiveGradient.Width, pt.Y / btnActiveGradient.Height);    gradRadial.Center = gradRadial.GradientOrigin;} private void btnActiveGradient_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e){    gradRadial.GradientOrigin = new Point(0.5, 0.5);   // Default    gradRadial.Center = gradRadial.GradientOrigin;}

原文地址:https://wpf.2000things.com/2011/02/27/230-changing-a-radial-gradient-as-mouse-moves-over-a-control/


***************************************译者注***************************************

ButtonChrome 类是用于创建特定主体的Button元素的外观的类。



最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台