WPF顺时针旋转无限边框LinearGradientBrush,而不旋转其余部分

时间:2018-03-28 20:59:39

标签: c# wpf rotation border

我在WPF C#中创建了一个没有样式的窗口。对于新窗口,我使用 Border 元素。在我内部使用渐变颜色。我的问题是,是否可以自动旋转 LinearGradientBrush 而不旋转其余部分?我希望每秒钟自动旋转一次,或者顺时针方向只旋转边界,而不是更多。

带渐变边框元素的窗口

Window with gradient Border element

示例演示我的意思

Example demonstration what I mean

1 个答案:

答案 0 :(得分:0)

我没有打扰圆角,使用不同的颜色而不是猜测你的每一秒让我觉得有点头晕,但这会旋转颜色渐变:

<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>

通过旋转画笔,这是另一种方法。 这样做时需要注意的是相当曲折的路径语法,以及画笔具有相对转换而不是渲染转换的事实。

    <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>