Здравствуйте!
Подскажите пожалуйста, как грамотно организовать связь содержимого (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 разметки, чтобы он отображал это свойство. Заранее благодарен за ответы.
Здравствуйте, 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}}" ... />