سؤال

أحاول تحريك عرض عنصر التحكم في الحدود في تطبيق Windows 8 Metro.لقد تمكنت من تحريك خصائص أخرى على الحدود، مثل العتامة:

private void Item_Tapped(object sender, RoutedEventArgs e)
{
    var border = sender as Border;

    var animation = new DoubleAnimation();
    animation.To = 0.0;
    animation.Duration = new Duration(TimeSpan.FromSeconds(1));

    var storyboard = new Storyboard();
    storyboard.Children.Add(animation);

    Storyboard.SetTarget(animation, border);
    Storyboard.SetTargetProperty(animation, "Opacity");

    storyboard.Begin();
}

ولكن عندما أحاول تحريك عرض عنصر التحكم:

private void Item_Tapped(object sender, RoutedEventArgs e)
{
    var border = sender as Border;

    var animation = new DoubleAnimation();
    animation.To = 600.0;
    animation.Duration = new Duration(TimeSpan.FromSeconds(1));

    var storyboard = new Storyboard();
    storyboard.Children.Add(animation);

    Storyboard.SetTarget(animation, border);
    Storyboard.SetTargetProperty(animation, "Width");

    storyboard.Begin();
}

لا شيء يحدث.

أنا قادر على القيام بذلك في WPF، ولكن ليس في Windows 8.هل هذا قيد أو خلل في Metro، أم أنني أفعل شيئًا خاطئًا؟

شكرًا

هل كانت مفيدة؟

المحلول

لست متأكدا من كيفية عملك في WPF.وفقا ل http://msdn.microsoft.com/en-us/library/system.windows.media.animation.storyboard.targetproperty ، يجب أن تكون الممتلكات المستهدفة خاصية التبعية.وفقا ل http://msdn.microsoft.com/en-us/Library/System.windows.controls.border ، العرض ليس خاصية التبعية.

نصائح أخرى

وكنت قادرا على انجاحه من خلال التمكين EnableDependentAnimation

    public static async Task Width(FrameworkElement obj, double doubleValue, int milliseconds)
    {
        var animation= new DoubleAnimation
        {
            To = doubleValue,
            Duration = TimeSpan.FromMilliseconds(milliseconds),
            EnableDependentAnimation = true// <== here
        };

        Storyboard.SetTarget(animation, obj);
        Storyboard.SetTargetProperty(animation, "Width");

        var sb = new Storyboard();
        sb.Children.Add(animation);
        await sb.BeginAsync();
    }

يتمتع!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top