Как создать изменяющуюся кнопку на основе эллипса в Silverlight? - PullRequest
0 голосов
/ 20 августа 2010

Мне нужно решить следующую проблему: в моем xaml есть несколько эллипсов, которые работают как кнопки, и некоторые из них могут открываться в 2 новых кнопках при нажатии.Я поместил их в отдельный холст таким образом, что эти кнопки, которые должны быть сгенерированы, уже существуют с непрозрачностью 0. Я хочу, чтобы эффект установил непрозрачность этих кнопок на 1, когда я нажимаю их родительскую кнопку при переходе.Как мне этого добиться?

C #

        private void ExpandHarborButtons(object sender, MouseButtonEventArgs e)
        {
            Ellipse thisPath = (Ellipse)sender;
            String test = (String)thisPath.DataContext;
            for(int i = 0; i < DoubleHarbors.Children.Count; i++)
            {

               Ellipse button = (Ellipse)VisualTreeHelper.GetChild(DoubleHarbors, i);

               if (test.Contains((String)button.DataContext))
               {
                   button.Opacity = 1;
               }
            }
        }

Так я сейчас и поступаю, но не работает так, как мне хочется.Кнопки показаны, но не с эффектом, который я говорил ранее.

1 Ответ

4 голосов
/ 20 августа 2010

Создайте DoubleAnimation и запустите его с помощью клика.Примерно так:

<Storyboard x:Name="fadeIn">
   <DoubleAnimation Storyboard.TargetName="ButtonName"  From="0.0" To="0.1" Duration="0:0:0.5"
                Soryboard.TargetProperty="Opacity"/>
</Storyboard>

Затем в коде:

fadeIn.Begin();

- РЕДАКТИРОВАТЬ -

Вот как сделать анимацию вC #.На самом деле это проще определить в XAML, но если это действительно то, что вам нужно, это способ сделать это.

        Storyboard sb = new Storyboard();
        DoubleAnimation da = new DoubleAnimation();
        da.From = 0;
        da.To = 1.0;
        da.Duration = new Duration(new TimeSpan(0, 0, 0, 0, 500));

        sb.Children.Add(da);

        Storyboard.SetTarget(sb, sender as Button);
        Storyboard.SetTargetProperty(Button1, new PropertyPath("Opacity"));

        sb.Begin();
...