Подсказка привязки RelativeSource к UserControl Ошибка DependencyProperty - PullRequest
1 голос
/ 01 сентября 2011

У меня есть пользовательский пользовательский контроль, который выполняет небольшую анимацию на тике DispatcherTimer, а также обновляет свойство DependencyProperty этого пользовательского контроля:

public partial class EggCounter : UserControl
{
  DispatcherTimer eggTimer;

  public EggCounter()
  {
     // Required to initialize variables
     InitializeComponent();

     eggTimer = new DispatcherTimer();
     eggTimer.Interval = TimeSpan.FromSeconds(5);
     eggTimer.Tick += new EventHandler(eggTimer_Tick);
     eggTimer.Start();

     Eggs = 0;
  }

  void eggTimer_Tick(object sender, EventArgs e)
  {
     Eggs += 4;
     Pop.Begin();
     mePop.Play();
  }

  private void mePop_MediaEnded(object sender, RoutedEventArgs e)
  {
     mePop.Position = TimeSpan.FromSeconds(0);
  }

  /// <summary>
  /// The <see cref="Eggs" /> dependency property's name.
  /// </summary>
  public const string EggsPropertyName = "Eggs";
  /// <summary>
  /// Gets or sets the value of the <see cref="Eggs" />
  /// property. This is a dependency property.
  /// </summary>
  public int Eggs
  {
     get
     {
        return (int)GetValue(EggsProperty);
     }
     set
     {
        SetValue(EggsProperty, value);
     }
  }
  /// <summary>
  /// Identifies the <see cref="Eggs" /> dependency property.
  /// </summary>
  public static readonly DependencyProperty EggsProperty = DependencyProperty.Register(EggsPropertyName, typeof(int), typeof(EggCounter), new UIPropertyMetadata(0));
}

XAML для этого кода не имеет значения. Затем я размещаю этот элемент управления на главной странице, например:

<my:EggCounter ToolTipService.ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=Eggs, StringFormat='{} Our chickens have laid {0} eggs since you have been here.'}"/>

Страница загружается нормально, но как только таймер срабатывает, я получаю эту ошибку:

"The given key was not present in the dictionary."

в установщике свойства Eggs в моем usercontrol, т.е. в этой строке:

SetValue(EggsProperty, value);

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

Ответы [ 2 ]

2 голосов
/ 01 сентября 2011

Ваш код содержит UIPropertyMetaData.Silverlight не имеет этого класса, вместо него он использует PropertyMetaData.

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

0 голосов
/ 01 сентября 2011

Если вы используете ваш код, я не получаю ошибку.

Но у меня не было линий

Pop.Begin();
mePop.Play();

в TimerCallback. Вероятно, вы должны искать ошибку в этих двух методах.

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