public override void OnApplyTemplate()
{
// Unhook from old elements
if (null != _itemsPresenterHostParent)
{
_itemsPresenterHostParent.SizeChanged -= OnItemsPresenterHostParentSizeChanged;
}
_storyboard.Stop();
base.OnApplyTemplate();
// Hook up to new elements
_itemsPresenterPart = GetTemplateChild(ItemsPresenterPartName) as ItemsPresenter;
_itemsPresenterTranslateTransformPart = GetTemplateChild(ItemsPresenterTranslateTransformPartName) as TranslateTransform;
_itemsPresenterHostPart = GetTemplateChild(ItemsPresenterHostPartName) as Canvas;
_itemsPresenterHostParent = (null != _itemsPresenterHostPart) ? _itemsPresenterHostPart.Parent as FrameworkElement : null;
_multipleSelectionModeSummary = GetTemplateChild(MultipleSelectionModeSummaryPartName) as TextBlock;
_border = GetTemplateChild(BorderPartName) as Border;
if (null != _itemsPresenterHostParent)
{
_itemsPresenterHostParent.SizeChanged += OnItemsPresenterHostParentSizeChanged;
}
if (null != _itemsPresenterHostPart)
{
Storyboard.SetTarget(_heightAnimation, _itemsPresenterHostPart);
if (!_storyboard.Children.Contains(_heightAnimation))
{
_storyboard.Children.Add(_heightAnimation);
}
}
else
{
if (_storyboard.Children.Contains(_heightAnimation))
{
_storyboard.Children.Remove(_heightAnimation);
}
}
if (null != _itemsPresenterTranslateTransformPart)
{
Storyboard.SetTarget(_translateAnimation, _itemsPresenterTranslateTransformPart);
if (!_storyboard.Children.Contains(_translateAnimation))
{
_storyboard.Children.Add(_translateAnimation);
}
}
else
{
if (_storyboard.Children.Contains(_translateAnimation))
{
_storyboard.Children.Remove(_translateAnimation);
}
}
SetBinding(ShadowItemTemplateProperty, new Binding("ItemTemplate") { Source = this });
// Commit deferred SelectedIndex (if any)
if (-1 != _deferredSelectedIndex)
{
SelectedIndex = _deferredSelectedIndex;
_deferredSelectedIndex = -1;
}
if (null != _deferredSelectedItem)
{
SelectedItem = _deferredSelectedItem;
_deferredSelectedItem = null;
}
OnSelectionModeChanged(SelectionMode);
if (this.SelectionMode == System.Windows.Controls.SelectionMode.Single)
{
OnSelectedItemChanged(SelectedItem, SelectedItem);
}
else
{
OnSelectedItemsChanged(SelectedItems, SelectedItems);
}
}