我有一個自定義WindowStyle,在XAML看起來是這樣的:嵌套ContentControls與模板
<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>
現在我想在一個單獨的Style
內Grid
,這樣我可以在其他地方使用它。
<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>
問題
編輯上面沒有給我任何錯誤,但它不」 t目前我的WindowContentStyle。 當我設置Window
控制的Content
屬性並加載樣式
this.window.Content = view;
this.window.Style = (Style)Application.Current.TryFindResource("WindowStyle");
內容被顯示在ContentPresenter
在WindowStyle,而不是在WindowContentStyle。因此,Template
沒有使用,我沒有標題的標題。
我怎樣才能讓我的外ContentPresenter
通上Content
到我的內心ContentPresenter
(在WindowContentStyle之一)?
在此先感謝!
問候 Loetn
感謝您的建議。我編輯了我的外部'ContentPresenter'到'ContentControl'(或者你的意思是內部的'ContentPresenter'?)。它確實顯示我的標題,但不顯示任何內容。任何想法如何設置*內容綁定*? – Loetn 2014-10-10 09:45:57
我的意思是你應該只使用一個'ContentPresenter'來呈現內容。您不應該嘗試對該內容進行「樣式」設置,因爲「樣式」選項有限,無論如何都不會傳遞給實際內容。你應該在所有其他情況下使用ContentControl,你可以使用ContentControl.Content屬性來設置內容和ContentControl.ContentTemplate屬性(http://msdn.microsoft.com/)com/en-us/library/system.windows.controls.contentcontrol.contenttemplate(v = vs.110).aspx)來應用你的'DataTemplate'。 – Sheridan 2014-10-10 10:54:44