/// <summary> /// Builds the visual tree for the <see cref="FloatingWindow" /> control /// when a new template is applied. /// </summary> public override void OnApplyTemplate() { UnsubscribeFromTemplatePartEvents(); UnsubscribeFromStoryBoardEvents(); base.OnApplyTemplate(); root = GetTemplateChild(PART_Root) as FrameworkElement; contentRoot = GetTemplateChild(PART_ContentRoot) as FrameworkElement; contentBorder = GetTemplateChild(PART_ContentBorder) as Border; chrome = GetTemplateChild(PART_Chrome) as FrameworkElement; titleContent = GetTemplateChild(PART_TitleContent) as ContentControl; contentPresenter = GetTemplateChild(PART_ContentPresenter) as FrameworkElement; closeButton = GetTemplateChild(PART_CloseButton) as ButtonBase; maximizeButton = GetTemplateChild(PART_MaximizeButton) as ButtonBase; minimizeButton = GetTemplateChild(PART_MinimizeButton) as ButtonBase; restoreButton = GetTemplateChild(PART_RestoreButton) as ButtonBase; if (root == null) throw new NotImplementedException("Template Part PART_Root is required to display FloatingWindow."); if (contentRoot == null) throw new NotImplementedException("Template Part PART_ContentRoot is required to display FloatingWindow."); if (contentPresenter == null) throw new NotImplementedException("Template Part PART_ContentPresenter is required to display FloatingWindow."); SetStyles(); GetStoryboards(); SetInitialRootPosition(); InitializeContentRootTransformGroup(); if (closeButton != null) closeButton.SetVisible(ShowCloseButton); if (minimizeButton != null) minimizeButton.SetVisible(ShowMinimizeButton); if (maximizeButton != null) maximizeButton.SetVisible(ShowMaximizeButton); SubscribeToTemplatePartEvents(); SubscribeToStoryBoardEvents(); }