Question

Nouveau pour WPF et avoir des onglets et dans chaque onglet le contenu est présenté dans un panneau coin incurvé / fenêtre / whateveryouwannacallit. Je ne savais pas comment faire (style, ControlTemplate), mais a décidé de suivre le chemin de DataTemplate.

Alors maintenant, j'ai cette 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>

Comme vous pouvez le voir avec la propriété d'arrière-plan, je wan't pour définir la couleur d'arrière-plan au contenu, mais ne savent pas comment. Ici, je l'utilise.

<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>

est en utilisant mal DataTemplate ici ou est-il une autre façon?

Je pourrais probablement mettre l'arrière-plan tout droit sur le contenu et le changement de rembourrage dans mLe modèle à la marge dans le contenu, mais dans certaines situations similiar qui ne fonctionneraient pas et il est plus agréable d'avoir seulement pour régler une fois.

EDIT:

Selon des conseils j'ai changé pour ControlTemplate et mettre également à l'intérieur d'un style. Cela résout le problème de fond, mais crée un plus grand. Maintenant, le contenu n'apparaîtra pas. J'ai lu sur un blog que mettre un targetType mais il permet de résoudre ce n'a pas résolu mon problème. Le code ressemble à ceci maintenant et ont aussi changé le ContentControl d'utiliser le style plutôt que de modèle.

<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>
Était-ce utile?

La solution

Utilisez ControlTemplate au lieu 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>

Utiliser un modèle au lieu de ContentTemplate

<ContentControl  Background="Green" Template="{StaticResource  TabContentPresenter}"/>

Autres conseils

Peut-être parce que TemplateBinding ne fonctionne pas avec DataTemplate. Cochez cette question pour plus de détails .

Même si cela fonctionne, tout ce que vous avez besoin est un ControlTemplate et non DataTemplate.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top