2009-06-02 16 views
1

J'ai un DataTemplate qui est utilisé comme logo pour décrire un objet Version. Le logo est simplement une image et du texte sur le dessus.Comportement de la Viewbox que je ne peux pas comprendre

Je dois utiliser le DataTemplate en 2 endroits: - que le contenu d'un bouton - comme un élément miniature d'une ListBox

La chose est, le logo doit être beaucoup plus faible dans la zone de liste que dans le bouton. Cela ne provoque pas de problème pour l'image du logo, qui est mise à l'échelle automatiquement. Mais les tailles de police ne sont pas mises à l'échelle automatiquement.

Il m'a donc été suggéré d'utiliser une ViewBox comme parent de la description XAML de tout mon logo.

Voici le DataTemplate:

 <DataTemplate DataType="{x:Type l:Version}"> 
      <Viewbox> 
       <Grid Width="175"> 
        <Image Source="{StaticResource Crate}"/> 
        <Grid> 
         <Grid.RowDefinitions> 
          <RowDefinition /> 
          <RowDefinition /> 
          <RowDefinition /> 
          <RowDefinition /> 
          <RowDefinition /> 
          <RowDefinition /> 
         </Grid.RowDefinitions> 

         <TextBlock Grid.Row="0" FontSize="18" Text="{Binding Type}" /> 
         <TextBlock Grid.Row="1" FontSize="20" Text="{Binding Platform}" /> 
         <TextBlock Grid.Row="2" FontSize="20" Text="{Binding ApprovedVersion}" /> 
         <TextBlock Grid.Row="3" FontSize="16" Text="{Binding StringFormat=C\{0\}, Path=CodeChangeList}" /> 
         <TextBlock Grid.Row="4" FontSize="16" Text="{Binding StringFormat=D\{0\}, Path=DataChangeList}" /> 
         <TextBlock Grid.Row="5" FontSize="16" Text="{Binding StringFormat=S\{0\}, Path=SoundChangeList}" /> 
        </Grid> 
       </Grid> 
      </Viewbox> 
     </DataTemplate> 

Puis-je utiliser ce modèle en changeant simplement DataContext mon bouton pour un objet Version. Le DataTemplate est ensuite automatiquement utilisé.

   <Button 
       x:Name="buttonVersion" 
       Width="300" 
       Height="300" 
       Click="SelectVersionButton_Click" 
       Background="Transparent" 
       Content="{Binding}"> 
      </Button> 

Comment se fait-il que mon logo ne remplisse pas tout le bouton? Il y a clairement des marges venant de nulle part et je ne peux pas expliquer cela.

Ce qui est intéressant est que si je supprime le Width = "175" de l'enfant Grid (l'enfant de la ViewBox), alors la ViewBox remplira entièrement le bouton. Cependant, ma tailles de police de logo ne sont pas mis à l'échelle plus correctement, puisque cette largeur de grille est comme la « taille de référence » que le ViewBox devrait utiliser à l'échelle du reste appropriée ...

Merci à l'avance

+0

Vous aviez raison au sujet de ma première réponse. Je suppose que je devrais utiliser un contrôle avant de faire des accusations sur son comportement. Ont supprimé la réponse pour éviter toute confusion. – PeterAllenWebb

+0

J'ai posé des questions sur la marge de la grille - mais ce n'était pas pertinent et je vois maintenant que Thibaut a supprimé cette ligne de la question - alors j'ai supprimé ma réponse – ChrisF

Répondre

1

Très bien , voici comment le problème a été résolu:

  1. Supprimer Largeur = 175 dans la grille
  2. Ajuster la police de DataTemplate tailles encore

Mes tailles de police ont été ajustées pour une image de caisse de 175x175. L'image de la caisse est 256x256. Si vous ne spécifiez pas Width = 175 dans l'élément Grid, il semble que la ViewBox calcule le ratio grâce à la taille d'origine de l'image (256x256). Et aussi, le bouton 300x300 est maintenant complètement rempli par l'image de caisse, grâce à la ViewBox, et les tailles de police sont augmentées en conséquence.

Donc à l'étape 2, j'ai dû ajuster les tailles de police pour une image 256x256 et non pour une image 175x175.