WPF Динамическое содержимое в ContentControl и его привязка
От: ssap092 Россия  
Дата: 08.07.12 18:32
Оценка:
Здравствуйте!

Подскажите пожалуйста, как грамотно организовать связь содержимого (Content) объекта унаследованного от ContentControl с одним из его свойств. Content хранится в отдельном файле и в зависимости от действий пользователя создается ContentControl на Canvas с тем или иным содержимым. Вот пример содержимого:

            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="39" />
                    <RowDefinition Height="73*" />
                    <RowDefinition Height="30" />
                </Grid.RowDefinitions>
                <Label Content="" Grid.Row="2" Margin="12,5,12,1" Name="label21" HorizontalContentAlignment="Center" />
                <Rectangle Margin="4,4,4,0" Name="rectangle21" Stroke="Black" Fill="#FFF55C45" Grid.RowSpan="2" />
                <Label Content="0.0" Margin="12,38,12,2" Name="label22" Foreground="White" FontSize="18" HorizontalContentAlignment="Center" Grid.RowSpan="2" VerticalContentAlignment="Center" />
                <Label Content="" FontSize="14" Foreground="White" HorizontalContentAlignment="Center" Margin="4,4,4,0" Name="label23" ClipToBounds="False" Background="#FFD13E55" BorderBrush="#FF000019" BorderThickness="1" VerticalContentAlignment="Center" />
            </Grid>


и таких несколько.

Вот так создается сам ContentContainer:


                DesignerItem newItem = null;
                Object content = XamlReader.Load(XmlReader.Create(new StringReader(dragObject.Xaml)));
                newItem = new DesignerItem();
                newItem.Content = content;


DesignerItem — это унаследованный от ContentContainer объект. dragObject.Xaml в данном случае содержит приведенную выше разметку. DesignerItem содержит свойство SomeText. Хотелось бы узнать, как привязать объект label23 разметки, чтобы он отображал это свойство. Заранее благодарен за ответы.
wpf contentcontrol
Re: WPF Динамическое содержимое в ContentControl и его привязка
От: MxMsk Португалия  
Дата: 08.07.12 18:54
Оценка:
Здравствуйте, ssap092, Вы писали:

S>DesignerItem — это унаследованный от ContentContainer объект. dragObject.Xaml в данном случае содержит приведенную выше разметку. DesignerItem содержит свойство SomeText. Хотелось бы узнать, как привязать объект label23 разметки, чтобы он отображал это свойство. Заранее благодарен за ответы.

Например, через RelativeSource:
<Label Content="{Binding Path=SomeText,RelativeSource={RelativeSource AncestorType=DesignerItem}}" ... />


Если DesignerItem недоступен, то можно поступить следующим образом:
newItem = new DesignerItem();
newItem.Content = content;
newItem.DataContext = newItem;


В таком случае, контрол в Content сможет привязываться к свойствам DesignerItem без указания источника:
<Label Content="{Binding SomeText}" ... />


В крайнем случае, если DataContext уже используется, ориентируйся на ContentControl в AncestorType:
<Label Content="{Binding Path=SomeText,RelativeSource={RelativeSource AncestorType=ContentControl}}" ... />
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.