代码之家  ›  专栏  ›  技术社区  ›  Axel M

WPF自动旋转无极边界线ArgRadientBrush顺时针旋转,不旋转其余部分

  •  0
  • Axel M  · 技术社区  · 7 年前

    我在WPF C中创建了一个没有样式的窗口。对于新窗口,我使用 边境 要素在我使用渐变色。我的问题是,是否可以自动旋转 线性渐变画刷 不旋转其余部分?我想在每秒钟内自动无休止地旋转,或类似的,只顺时针旋转边界,而不是更多。

    带有渐变边框元素的窗口

    Window with gradient Border element

    示例演示我的意思

    Example demonstration what I mean

    1 回复  |  直到 7 年前
        1
  •  1
  •   Andy    7 年前

    我不在乎圆角,使用不同的颜色,而不是猜测你的颜色,每一秒都让我感到有点眩晕,但这会改变颜色梯度:

    <Border BorderThickness="10">
        <Border.BorderBrush>
            <LinearGradientBrush x:Name="bbrush">
                <GradientStop Color="Blue" Offset="0" />
                <GradientStop Color="Yellow" Offset="0.5" />
                <GradientStop Color="Red" Offset="1.0" />
            </LinearGradientBrush>
            </Border.BorderBrush>
        <Border.Style>
            <Style TargetType="Border">
                <Style.Triggers>
                    <EventTrigger RoutedEvent="Border.Loaded">
                        <BeginStoryboard>
                            <Storyboard RepeatBehavior="Forever">
                                <PointAnimation Storyboard.TargetProperty="BorderBrush.(LinearGradientBrush.StartPoint)" From="1, 0" To="0, 1" Duration="00:00:10" />
                                <PointAnimation Storyboard.TargetProperty="BorderBrush.(LinearGradientBrush.StartPoint)" From="0, 1" To="1, 0" Duration="00:00:10"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Style.Triggers>
            </Style>
        </Border.Style>
    </Border>
    

    这里有另一种方法,旋转画笔。 执行此操作时需要注意的是相当曲折的路径语法,以及笔刷具有相对转换而不是rendertransform的事实。

        <Border BorderThickness="10">
            <Border.BorderBrush>
                <LinearGradientBrush x:Name="bbrush">
                    <GradientStop Color="Blue" Offset="0" />
                    <GradientStop Color="Yellow" Offset="0.5" />
                    <GradientStop Color="Red" Offset="1.0" />
                    <LinearGradientBrush.RelativeTransform>
                        <RotateTransform CenterX="0.5" CenterY="0.5" x:Name="rotateBrush" />
                    </LinearGradientBrush.RelativeTransform>
                </LinearGradientBrush>
                </Border.BorderBrush>
            <Border.Style>
                <Style TargetType="Border">
                    <Style.Triggers>
                        <EventTrigger RoutedEvent="Border.Loaded">
                            <BeginStoryboard>
                                <Storyboard RepeatBehavior="Forever">
                                    <DoubleAnimation Storyboard.TargetProperty="(Border.BorderBrush).(Brush.RelativeTransform).(RotateTransform.Angle)" 
                                                     From="0"
                                                     To="359"
                                                     Duration="00:00:10" />
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>
                    </Style.Triggers>
                </Style>
            </Border.Style>
        </Border>