0

我有一个自定义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>

ContenPresenterWindowStyle中使用 a 来呈现它:

<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");

内容显示在ContentPresenterWindowStyle 中 而不是WindowContentStyle中。正因为如此,Template没有使用,并且我没有带有标题的标题。

我怎样才能让我的外部ContentPresenter传递Content到我的内部ContentPresenterWindowContentStyle中的那个)?

提前致谢!

问候 Loetn

4

1 回答 1

1

您应该使用 aContentControl来显示您的内容,而不是ContentPresenter. 从 MSDN 上的ContentPresenter页面:

您通常使用a的ContentPresenter inControlTemplateContentControl来指定要添加内容的位置。

从 MSDN 上的ContentControl页面:

AContentControl具有有限的默认样式。如果要增强控件的外观,可以创建一个新的DataTemplate.

于 2014-10-10T09:15:17.957 回答