Ответ на этот вопрос в том, что это не представляется возможным - не в Silverlight 3 в любом случае.
Используя отладчик, я смог найти частную собственность раскадровки, когда, когда я подошел к дереву объектов, я попал в содержащийся элемент шаблона - однако я не мог коснуться этого из кода, используя отражение из-за безопасности ограничения на приложения Silverlight (это может быть возможно и в WPF).
Мое возможное решение связано с использованием Dictionary<Storyboard, Grid>
и нескольких обработчиков событий. С шаблоном я подключил обработчик Loaded
, это означает, что мой обработчик получает вызов каждый раз, когда экземпляр шаблона создается и загружается (т. Е. Для каждого элемента данных, привязанного к списку). На данный момент, у меня есть ссылка на физический экземпляр шаблона, так что я могу найти свои ребенок для раскадровки:
private void ItemTemplate_Loaded(object sender, RoutedEventArgs e)
{
Storyboard s = getStoryBoard(sender);
if (s != null)
{
if (!_startedStoryboards.ContainsKey(s))
_startedStoryboards.Add(s, (Grid)sender);
}
}
private Storyboard getStoryBoard(object container)
{
Grid g = container as Grid;
if (g != null)
{
if (g.Resources.Contains("FadeOut"))
{
Storyboard s = g.Resources["FadeOut"] as Storyboard;
return s;
}
}
return null;
}
private Dictionary<Storyboard, Grid> _startedStoryboards = new Dictionary<Storyboard, Grid>();
Затем, когда Completed
события раскадровки в обжигает, я могу легко использовать этот словарь в качестве поиск, чтобы получить шаблон элемента Принимающий внутри, и оттуда я могу получить DataContext
шаблона элемента и делать гадости я Запланировано:
private void FadeOut_Completed(object sender, EventArgs e)
{
if (_startedStoryboards.ContainsKey((Storyboard)sender))
{
Grid g = _startedStoryboards[(Storyboard)sender];
if (g.DataContext != null)
{
MyDataItem z = g.DataContext as MyDataItem;
if (z != null)
{
... do my thing ...
}
}
}
}
[Примечание: этот код был продезинфицировать для публичного просмотра , извините за любые небольшие расхождения или синтаксические ошибки, которые вы можете заметить]