Как разрешить пользователю изменять свойство в шаблоне? - PullRequest
1 голос
/ 02 марта 2010

У меня есть кнопка, которую в Blend я редактировал (используя Редактировать текущий шаблон). Я добавил анимацию для мыши и т. Д., И кнопка работает, как и ожидалось.

Тем не менее, при наведении мыши на событие у меня есть форма, которая масштабируется. Я хочу дать пользователю возможность установить в XAML свойства поворота и масштабирования.

Так, например, что-то вроде этого:

<Button Height="76" Content="Gallery" Style="{StaticResource RotatingAnimationButton}" " Scaling="2.0" >

где в шаблоне у меня есть:

<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Document" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0]. (ScaleTransform.ScaleX)">

где Value = "1.5" будет изменено на "2.0".

В настоящее время все, что у меня есть, это стиль шаблона. Я не уверен, могу ли я передать параметры или мне нужно создать какой-то пользовательский элемент управления?

JD

Примечание. Этот вопрос был изначально опубликован как Silverlight и WPF. Но, как вы увидите, это относится только к Silverlight, поэтому превосходные решения доставили мне проблемы.

1 Ответ

2 голосов
/ 03 марта 2010

У вас есть два хороших варианта:

  1. Вы можете создать подкласс Button и добавить свойство "Масштабирование", или
  2. Вы можете создать прикрепленное свойство «Масштабирование» и прикрепить его к кнопке

В любом случае ваша анимация может привязываться к ней.

Если ваша кнопка не настроена другими способами, я бы обычно использовал прикрепленное свойство. Вы бы использовали стандартный шаблон присоединенного свойства (используйте фрагмент «propa»):

public class MyAttachedProperties
{
      // Scaling
  public static double GetScaling(DependencyObject obj) { return (double)obj.GetValue(ScalingProperty); }
  public static void SetScaling(DependencyObject obj, double value) { obj.SetValue(ScalingProperty, value); }
  public static readonly DependencyProperty ScalingProperty = DependencyProperty.RegisterAttached("Scaling", typeof(double), typeof(MyAttachedProperties));
}

В коде, который использует кнопку, вы бы назвали ее следующим образом:

<Button Height="76" Content="Gallery"
        Style="{StaticResource RotatingAnimationButton}"
        local:MyAttachedProperties.Scaling="2.0" />

В шаблоне вы бы привязали его так:

Value="{Binding Path=(local:MyAttachedProperties.Scaling),
                RelativeSource={RelativeSource TemplatedParent}}"

Оба эти бита XAML предполагают, что у вас есть xmlns: local, определенный для включения класса MyAttachedProperties.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...