Рендеринг не UIElement через связывание - PullRequest
1 голос
/ 18 декабря 2009

Если у меня есть объект, полученный из System.Windows.DispatcherObject, но определяющий ControlTemplate.

public class A : System.Windows.DependencyObject
{
   public ControlTemplate ControlTemplate {get; set;}
}

который является членом

public class B 
{
   public A NonUIElement {get; set;}
}

Можно ли визуализировать этот объект с помощью привязки, такой как

<Border Name="Border">
<ContentPresenter Margin="5,0" Content="{Binding NonUIElement }"/>
</Border>

при условии, что DataContext границы установлен на экземпляр B?

Ответы [ 2 ]

3 голосов
/ 18 декабря 2009

Объект будет отображаться, но не так, как я думаю, вы надеетесь. The Content из ContentPresenter устанавливается на экземпляр A. WPF затем пытается выяснить, как отобразить этот экземпляр A. Сначала он спрашивает, является ли этот объект UIElement? В этом случае ответ - нет. Затем он ищет DataTemplate для типа. В этом случае нет DataTemplate для класса А. Поэтому он возвращается к вызову ToString (). Таким образом, ваш ContentPresenter отобразит TextBlock, содержащий текст «YourNamespace.A».

Тот факт, что A имеет член типа ControlTemplate, не влияет на эту логику. Для WPF это просто кусок данных, которые А несет в себе. Только для WPF использует ControlTemplate, когда задействован элемент управления и ControlTemplate назначено свойству Template.

Таким образом, вам нужно либо предоставить DataTemplate для A (который, конечно, может получить доступ к ControlTemplate и использовать его для визуализации экземпляра), либо создать именованное DataTemplate и применить его через ContentPresenter.ContentTemplate, либо взамен UIElement.

0 голосов
/ 20 декабря 2009

Я наконец получил это с этим;

<HierarchicalDataTemplate DataType="{x:Type vm:MapLayerModel}" ItemsSource="{Binding Path=Children, Mode=OneTime}">   
**<ContentControl Margin="5" Content="{Binding LayerRepresentation}" Template="{Binding LayerRepresentation.ControlTemplate}" Mode=OneTime/>**
</HierarchicalDataTemplate>

Это был отличный личный урок по шаблонам WPF и его модели управления контентом. Еще раз спасибо, Итоулсон.

...