Вложенные ContentControls с шаблоном
У меня есть собственный WindowStyle, XAML выглядит так:
<Style TargetType="{x:Type Window}"
x:Key="WindowStyle">
/** Some setters **/
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ContentControl">
<AdornerDecorator>
<Grid Background="#88000000"
x:Name="WindowBackgroundGrid">
<Border x:Name="WindowContentBorder"
Background="{DynamicResource WindowBackground}"MaxHeight="{Binding Source={x:Static SystemParameters.FullPrimaryScreenHeight}}"
MaxWidth="{Binding Source={x:Static SystemParameters.FullPrimaryScreenWidth}}"
Margin="20">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- Header -->
<Border BorderBrush="{DynamicResource BorderBrushColor}"
Background="{DynamicResource PaneHeader_Background}"
Grid.Row="0">
<TextBlock Text="Title"Foreground="{DynamicResource DefaultForeground}"
FontSize="16"
FontWeight="Bold"
Margin="5,5,2,5" />
</Border>
<!-- Content -->
<ScrollViewer Grid.Row="1"
Margin="5">
<ContentPresenter Content="{TemplateBinding Content}" />
</ScrollViewer>
</Grid>
</Border>
</Grid>
</AdornerDecorator>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Теперь я хочу внутренний Grid
в отдельном Style
так что я могу использовать его в другом месте.
<Style x:Key="WindowContentStyle"
TargetType="{x:Type ContentPresenter}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- Header -->
/** Border control **/
<!-- Content -->
<ScrollViewer Grid.Row="1"
Margin="5">
<ContentPresenter Content="{Binding Content, RelativeSource={RelativeSource TemplatedParent}}" />
</ScrollViewer>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
И я использую ContenPresenter
в моем WindowStyle представить это:
<ContentPresenter>
<ContentPresenter.Style>
<Style TargetType="{x:Type ContentPresenter}"
BasedOn="{StaticResource WindowContentStyle}" />
</ContentPresenter.Style>
</ContentPresenter>
проблема
Редактирование выше не дало мне никаких ошибок, но оно не представляет мой WindowContentStyle. Когда я установил Content
собственность Window
контролировать и загружать стиль
this.window.Content = view;
this.window.Style = (Style)Application.Current.TryFindResource("WindowStyle");
содержание отображается в ContentPresenter
в WindowStyle, а не в WindowContentStyle. Из-за этого Template
не используется, и у меня нет заголовка с заголовком.
Как я могу сделать свой внешний ContentPresenter
передать на Content
к моему внутреннему ContentPresenter
(тот, что в WindowContentStyle)?
Заранее спасибо!
Привет Лётн
1 ответ
Вы должны использовать ContentControl
отображать ваш контент, а не ContentPresenter
, От ContentPresenter
Страница класса на MSDN:
Вы обычно используете
ContentPresenter
вControlTemplate
изContentControl
указать, где контент должен быть добавлен.
От ContentControl
Страница класса на MSDN:
ContentControl
имеет ограниченный стиль по умолчанию. Если вы хотите улучшить внешний вид элемента управления, вы можете создать новыйDataTemplate
,