Свойство WPF DataTemplate установлено в Content - PullRequest
4 голосов
/ 25 июня 2010

Новичок в WPF и имеет вкладки, и на каждой вкладке содержимое представлено в изогнутой угловой панели / window / whateveryouwannacallit.Я не был уверен, как это сделать (Style, ControlTemplate), но решил пойти по пути DataTemplate.

Так что теперь у меня есть этот DataTemplate:

<DataTemplate x:Key="TabContentPresenter" >
    <Border Margin="10"
            BorderBrush="{StaticResource DarkColorBrush}"
            CornerRadius="8"
            BorderThickness="2"
            Grid.Row="0"
            Padding="5" 
            Background="{TemplateBinding Background}">         

        <ContentPresenter Content="{Binding}" />

    </Border>
</DataTemplate>

Как вы можете видеть с помощьюсвойство background Я не хочу устанавливать цвет фона для содержимого, но не знаю как.Здесь я использую его.

<Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="120"/>
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>

            <ContentControl ContentTemplate="{StaticResource TabContentPresenter}" Background="White">


                <!-- Something Here -->

            </ContentControl>

            <ContentControl ContentTemplate="{StaticResource TabContentPresenter}" Grid.Row="1" Background="Blue">

                <!-- Something Here -->

            </ContentControl>

        </Grid>

Неправильно ли используется DataTemplate здесь или есть какой-то другой способ?

Я мог бы, вероятно, установить фон прямо для содержимого и перейти от отступов в шаблоне кмаржа в содержании, но в некоторых похожих ситуациях это не сработает, и лучше установить его только один раз.

РЕДАКТИРОВАТЬ:

Согласно совету, я перешел на ControlTemplate и также поместил еговнутри стиля.Это решает фоновую проблему, но создает большую.Теперь контент не появится.Я прочитал в блоге здесь , что установка targetType решает эту проблему, но это не решает мою проблему.Теперь код выглядит так, а также изменил ContentControl для использования стиля вместо Template.

<Style x:Key="TabContentPresenter" TargetType="ContentControl" >
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ContentControl">
                <Border Margin="10"
            BorderBrush="{StaticResource DarkColorBrush}"
            CornerRadius="8"
            BorderThickness="2"
            Grid.Row="0"
            Background="{TemplateBinding Background}">

                    <ContentPresenter Content="{Binding}" />

                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Ответы [ 2 ]

7 голосов
/ 25 июня 2010

Использовать ControlTemplate вместо DataTemplate

 <ControlTemplate  x:Key="TabContentPresenter">
        <Border Margin="10" 
                    CornerRadius="8" 
                    BorderThickness="2" 
                    Grid.Row="0" 
                    Padding="5"  
                    Background="{TemplateBinding Background}">
            <ContentPresenter Content="{Binding}"/>
        </Border>
    </ControlTemplate>

Использовать Template вместо ContentTemplate

<ContentControl  Background="Green" Template="{StaticResource  TabContentPresenter}"/>
5 голосов
/ 25 июня 2010

Может быть потому, что TemplateBinding не работает с DataTemplate. Проверьте этот вопрос для деталей .

Даже если это работает, все, что вам нужно, это ControlTemplate , а не таблица данных.

...