2013-07-01 4 views
1

Если у меня есть загрузчик ресурсов, который создает XAML на лету (в этом случае возвращается StackPanel), как я могу привязать его к xaml?Привязать к XAML в коде

Моя собственность:

public StackPanel InfoPane {get;set;} 

Я попытался это, но он не работает

<Grid> 
    <ContentPresenter Content="{Binding InfoPane}" /> 
</Grid> 

ответ

1

(. К сожалению, слишком долго для комментария)

Вы подход является правильным, следующий минимальный пример работает для меня:

XAML:

<Grid> 
    <ContentPresenter Content="{Binding InfoPane}" /> 
</Grid> 

Codebehind:

public StackPanel InfoPane { get; set; } 

public MainWindow() 
{ 
    InitializeComponent(); 
    InfoPane = new StackPanel(); 
    InfoPane.Children.Add(new TextBlock { Text = "dynamically created" }); 
    this.DataContext = this; 
} 

Итак, ваша проблема должна лежать где-то в другом месте. Может быть, вы установили InfoPaneпосле, установив DataContext на ваше устройство? Обратите внимание, что вы не вызываете PropertyChanged, поэтому пользовательский интерфейс не знает, что изменилось InfoPane.

+1

Спасибо за подтверждение, после того, как вы сказали, что я понял, что я не называл 'NotifyPropertyChanges'! – Chris

1

Вам не нужно связывания, все, что вам нужно сделать, это добавить StackPanel в коллекцию детей, когда StackPanel был создан.

Это сказал мой совет должен взять другой маршрут:

Поместить элемент управления содержимым в сетке и связать его содержание фактического содержания (не управления) и зарегистрировать для каждого типа контента ContentTemplate так ContentControl выберет правильный шаблон в зависимости от отображаемого содержимого.

Создание пользовательского интерфейса в коде следует избегать как можно больше, потому что его сложно поддерживать, а WPF имеет способы обработки пользовательского интерфейса, зависящего от контента.

+0

Мы создаем раздел справки с содержимым, которое должно отображаться в расширенном формате как в Silverlight, так и в WPF. Учитывая, что silverlight не поддерживает XPS или RTF, мы запускаем собственное решение. «Загрузчик» генерирует XAML, который мы показываем – Chris

+0

. Не могли бы вы объяснить, почему это возможно только с помощью генерируемого кодом XAML? –

+0

Как еще мы можем его отобразить? – Chris