/// <summary> /// Return the template to use. This may depend on the Content, or /// other properties. /// </summary> /// <remarks> /// The base class implements the following rules: /// (a) If ContentTemplate is set, use it. /// (b) If ContentTemplateSelector is set, call its /// SelectTemplate method. If the result is not null, use it. /// (c) Look for a DataTemplate whose DataType matches the /// Content among the resources known to the ContentPresenter /// (including application, theme, and system resources). /// If one is found, use it. /// (d) If the type of Content is "common", use a standard template. /// The common types are String, XmlNode, UIElement. /// (e) Otherwise, use a default template that essentially converts /// Content to a string and displays it in a TextBlock. /// Derived classes can override these rules and implement their own. /// </remarks> protected virtual DataTemplate ChooseTemplate() { DataTemplate template = null; object content = Content; // ContentTemplate has first stab template = ContentTemplate; // no ContentTemplate set, try ContentTemplateSelector if (template == null) { if (ContentTemplateSelector != null) { template = ContentTemplateSelector.SelectTemplate(content, this); } } // if that failed, try the default TemplateSelector if (template == null) { template = DefaultTemplateSelector.SelectTemplate(content, this); } return(template); }
protected override void OnContentChanged(object oldContent, object newContent) { base.OnContentChanged(oldContent, newContent); if (newContent is UIElement) { return; } if (newContent == null) { ContentTemplate = null; return; } if (oldContent == null && ContentTemplate != null) { return; } if (ContentTemplateSelector != null) { ContentTemplate = ContentTemplateSelector.SelectTemplate(newContent, this); return; } var key = GetKey(newContent); ContentTemplate = (DataTemplate)Application.Current.Resources[key]; }
private IFrameworkTemplate FindTemplate() { if (Content == null) { return(null); } if (Content is UIElement) { return(Template is UIElementTemplate && ((UIElementTemplate)Template).Content == Content ? Template : new UIElementTemplate((UIElement)Content)); } if (ContentTemplate != null) { return(ContentTemplate); } if (ContentTemplateSelector != null) { ContentTemplateSelector.SelectTemplate(Content, this); } DataTemplate dataTemplate; if (TryFindDataTemplate(Content.GetType(), out dataTemplate)) { return(dataTemplate); } return(DefaultContentTemplate.Default); }
private void StartTransition(object oldContent, object newContent) { // both presenters must be available, otherwise a transition is useless. if (CurrentContentPresentationSite != null && PreviousContentPresentationSite != null) { if (RestartTransitionOnContentChange) { CurrentTransition.Completed -= OnTransitionCompleted; } if (ContentTemplateSelector != null) { PreviousContentPresentationSite.ContentTemplate = ContentTemplateSelector.SelectTemplate(oldContent, this); CurrentContentPresentationSite.ContentTemplate = ContentTemplateSelector.SelectTemplate(newContent, this); } CurrentContentPresentationSite.Content = newContent; PreviousContentPresentationSite.Content = oldContent; // and start a new transition if (!IsTransitioning || RestartTransitionOnContentChange) { if (RestartTransitionOnContentChange) { CurrentTransition.Completed += OnTransitionCompleted; } IsTransitioning = true; VisualStateManager.GoToState(this, NormalState, false); VisualStateManager.GoToState(this, GetTransitionName(Transition), true); } } }
public override void OnApplyTemplate() { if (IsTransitioning) { AbortTransition(); } if (CustomVisualStates != null && CustomVisualStates.Any()) { var presentationGroup = VisualStates.TryGetVisualStateGroup(this, PresentationGroup); if (presentationGroup != null) { foreach (var state in CustomVisualStates) { presentationGroup.States.Add(state); } } } base.OnApplyTemplate(); PreviousContentPresentationSite = GetTemplateChild(PreviousContentPresentationSitePartName) as ContentPresenter; CurrentContentPresentationSite = GetTemplateChild(CurrentContentPresentationSitePartName) as ContentPresenter; if (CurrentContentPresentationSite != null) { if (ContentTemplateSelector != null) { CurrentContentPresentationSite.ContentTemplate = ContentTemplateSelector.SelectTemplate(Content, this); } else { CurrentContentPresentationSite.ContentTemplate = ContentTemplate; } CurrentContentPresentationSite.Content = Content; } // hookup currenttransition var transition = GetStoryboard(Transition); CurrentTransition = transition; if (transition == null) { var invalidTransition = Transition; // revert to default Transition = DefaultTransitionState; throw new Exception(string.Format("'{0}' Transition could not be found!", invalidTransition)); } VisualStateManager.GoToState(this, NormalState, false); }
private void EnsureTemplate() { DataTemplate template = ContentTemplate; if (template == null) { if (ContentTemplateSelector != null) { template = ContentTemplateSelector.SelectTemplate(Content, this); } } ActualContentTemplate = template; }
protected override void PrepareContainerForItemOverride(DependencyObject element, object item) { base.PrepareContainerForItemOverride(element, item); var item2 = element as TileViewItem; if (item2 != null) { item2.ParentTileView = this; Dictionary <int, TileViewItem> orderedContainers = GetOrderedContainers(); if (!orderedContainers.ContainsKey(orderedContainers.Count)) { orderedContainers.Add(orderedContainers.Count, item2); } AttachItemContainerEventHandlers(item2); AssignItemContainersToCells(orderedContainers); UpdateItemsSizeAndPosition(); if ((MaximizeMode == TileViewMaximizeMode.One) && IsItemMaximizedByDefault(item2)) { item2.SizeChanged += MaximizedContainerSizeChanged; if (item2.TileState == TileViewItemState.Maximized) { HandleTileViewItemMaximized(item2); } else { item2.TileState = TileViewItemState.Maximized; } } if ((MaximizedItem != null) && (MaximizedItem != item)) { item2.TileState = TileViewItemState.Minimized; } if (item2.ContentTemplate == null) { if (ContentTemplate != null) { item2.ContentTemplate = ContentTemplate; } else if (ContentTemplateSelector != null) { item2.ContentTemplate = ContentTemplateSelector.SelectTemplate(item, item2); } } } UpdateItemsLayout(); }
/// <summary> /// Called when the value of the <see cref="P:System.Windows.Controls.ContentControl.Content" /> property changes. /// </summary> /// <param name="oldContent">The old value of the <see cref="P:System.Windows.Controls.ContentControl.Content" /> property.</param> /// <param name="newContent">The new value of the <see cref="P:System.Windows.Controls.ContentControl.Content" /> property.</param> protected override void OnContentChanged(object oldContent, object newContent) { ContentPresenter currentContentPresentationSite = TransitioningContentControlEx._currentContentPresentationSiteGetter(this); if (ContentTemplateSelector != null) { ContentPresenter previousContentPresentationSite = TransitioningContentControlEx._previousContentPresentationSiteGetter(this); if (previousContentPresentationSite == null || currentContentPresentationSite == null) { return; } previousContentPresentationSite.ContentTemplate = ContentTemplateSelector.SelectTemplate( oldContent, this); currentContentPresentationSite.ContentTemplate = ContentTemplateSelector.SelectTemplate(newContent, this); } base.OnContentChanged(oldContent, newContent); }