如何在WPF(故事板动画)中以编程方式更改矩形的边框?

时间:2015-06-03 16:17:23

标签: c# wpf storyboard

为了改变后面代码中矩形的颜色,我可以使用:

        InitializeComponent();

        StackPanel myStackPanel = new StackPanel();
        myStackPanel.Margin = new Thickness(20);

        Rectangle myRectangle = new Rectangle();
        myRectangle.Name = "MyRectangle";

        // Create a name scope for the page.
        NameScope.SetNameScope(this, new NameScope());

        this.RegisterName(myRectangle.Name, myRectangle);
        myRectangle.Width = 100;
        myRectangle.Height = 100;
        SolidColorBrush mySolidColorBrush = new SolidColorBrush(Colors.Blue);
        this.RegisterName("MySolidColorBrush", mySolidColorBrush);
        myRectangle.Fill = mySolidColorBrush;
        SolidColorBrush blackBrush = new SolidColorBrush();
        blackBrush.Color = Colors.Black;
        myRectangle.StrokeThickness = 4;
        myRectangle.Stroke = blackBrush;

        ColorAnimation myColorAnimation = new ColorAnimation();
        myColorAnimation.From = Colors.Blue;
        myColorAnimation.To = Colors.Red;
        myColorAnimation.Duration = new Duration(TimeSpan.FromSeconds(1));
        Storyboard.SetTargetName(myColorAnimation, "MySolidColorBrush");
        Storyboard.SetTargetProperty(myColorAnimation,
            new PropertyPath(SolidColorBrush.ColorProperty));
       Storyboard myStoryboard = new Storyboard();

        myStoryboard.Children.Add(myColorAnimation);


        myRectangle.MouseEnter += delegate(object sender, MouseEventArgs e)
        {
            myStoryboard.Begin(this);
        };

        myStackPanel.Children.Add(myRectangle);
        this.Content = myStackPanel;

我怎样才能对矩形的边框做同样的事情(实际上我看起来比褪色边框效果更多,可能是通过更改Stroke属性)?

1 个答案:

答案 0 :(得分:1)

修改您的Stroke

    SolidColorBrush mySolidColorBrush = new SolidColorBrush(Colors.Blue);
    this.RegisterName("MySolidColorBrush", mySolidColorBrush);
    myRectangle.Fill = mySolidColorBrush;

    SolidColorBrush blackBrush = new SolidColorBrush(Colors.Black);
    this.RegisterName("MySolidColorBorderBrush", blackBrush);
    myRectangle.StrokeThickness = 4;
    myRectangle.Stroke = blackBrush;

故事板设置

ColorAnimation myColorAnimation = new ColorAnimation();
myColorAnimation.From = Colors.Black;
myColorAnimation.To = Colors.Blue;
myColorAnimation.Duration = new Duration(TimeSpan.FromSeconds(1));
Storyboard.SetTargetName(myColorAnimation, "MySolidColorBorderBrush");
Storyboard.SetTargetProperty(myColorAnimation,
        new PropertyPath(SolidColorBrush.ColorProperty));
Storyboard myStoryboard = new Storyboard();

myStoryboard.Children.Add(myColorAnimation);

仅用于存档(xaml)

<StackPanel Margin="20">
    <Rectangle x:Name="MyRectangle" Width="100" Height="100" StrokeThickness="4">
        <Rectangle.Fill>
            <SolidColorBrush x:Name="MySolidColorBrush" Color="Blue" />
        </Rectangle.Fill>
        <Rectangle.Stroke>
            <SolidColorBrush x:Name="MySolidColorBorderBrush" Color="Black" />
        </Rectangle.Stroke>
        <Rectangle.Triggers>
            <EventTrigger RoutedEvent="MouseEnter">
                <BeginStoryboard>
                    <Storyboard Duration="0:0:1">
                        <ColorAnimation Storyboard.TargetName="MySolidColorBrush" Storyboard.TargetProperty="Color" From="Blue" To="Red" />
                        <ColorAnimation Storyboard.TargetName="MySolidColorBorderBrush" Storyboard.TargetProperty="Color" From="Black" To="Blue" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Rectangle.Triggers>
    </Rectangle>
</StackPanel>