Nouveauté de WPF et dotée d'onglets. Dans chaque onglet, le contenu est présenté dans un panneau/une fenêtre/un coin incurvé. Je n'étais pas sûr de savoir comment faire cela (Style, ControlTemplate) mais j'ai décidé de suivre la méthode DataTemplate.Propriété WPF DataTemplate définie sur Contenu
Alors maintenant, j'ai ce 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 le bien de fond que je wan't pour définir la couleur d'arrière-plan au contenu, mais ne sais 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>
L'utilisation de DataTemplate est-elle incorrecte ou existe-t-il un autre moyen?
Je pourrais probablement définir l'arrière-plan directement sur le contenu et passer du remplissage dans le modèle à la marge dans le contenu mais dans certaines situations similaires qui ne fonctionneraient pas et il est plus agréable de ne le définir qu'une seule fois.
EDIT:
Selon des conseils j'ai changé pour ControlTemplate et mettre également dans un style. Cela résout le problème d'arrière-plan mais en crée un plus gros. Maintenant, le contenu n'apparaîtra pas. J'ai lu sur un blog here que mettre un targetType résout cela mais cela n'a pas résolu mon problème. Le code ressemble à ceci maintenant et a également changé le ContentControl pour utiliser le style au lieu de 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>
Cela fonctionne avec l'arrière-plan mais maintenant mon contenu n'apparaît pas à l'intérieur de la bordure. –
En fin de compte, il a fallu changer la propriété ContentPresenter Content en {TemplateBinding Content}. –