Рассмотрим следующую часть визуального дерева в приложении Windows Phone SL:
Как видите, шаблон PanoramaItem содержит ссылку на статический DataTemplateSelector
. Это простой класс, который динамически передает шаблон данных на основе предоставленного ключа для отображения разных представлений для разных моделей представлений, представленных как DataContext
- PanoramaItem
. Вот код для этого:
public static T FindResource<T>(this DependencyObject initial, string key) where T : DependencyObject
{
DependencyObject current = initial;
while (current != null)
{
if (current is FrameworkElement)
{
if ((current as FrameworkElement).Resources.Contains(key))
{
return (T)(current as FrameworkElement).Resources[key];
}
}
current = VisualTreeHelper.GetParent(current);
}
if (Application.Current.Resources.Contains(key))
{
return (T)Application.Current.Resources[key];
}
return default(T);
}
}
public class DataTemplateSelector : ContentControl
{
protected override void OnContentChanged(object oldContent, object newContent)
{
ContentTemplate = this.FindResource<DataTemplate>(newContent.GetType().FullName);
}
}
Проблема в том, что у меня нет контроля над созданием ContentPresenter
, которое вы видите на изображении выше. Чтобы получить согласованный макет, мне нужно установить его свойство «Вертикальное выравнивание». Кажется, я не знаю, как я могу это сделать, поскольку я не могу сослаться на это ContentPresenter
. Как я могу установить свойства ContentPresenter?