2009-08-25 5 views
1

J'ai une liste de chaînes que je lie à un contrôle d'éléments.wpf pivoter et traduire le problème de transformation sur le bloc de texte

Les chaînes sont affichées dans les blocs de texte que j'ai déclarés dans le modèle itemscontrol. J'ai fait pivoter les blocs de texte 270 pour que le texte soit de son côté - J'ai également traduit les blocs de texte par leur largeur afin qu'ils soient en haut de la page. Mon problème est qu'ils sont maintenant trop éloignés car ils gardent la largeur d'origine plutôt que la largeur transformée. Je peux comprendre pourquoi il le fait, mais je dois les empiler sans aucun écart.

Quelqu'un peut-il me diriger dans la bonne direction s'il vous plaît?

<Window x:Class="WpfApplication1.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="354" Width="632" 
     DataContext="{Binding RelativeSource={RelativeSource Self}}" > 
<Window.Resources> 
    <TransformGroup x:Key="Rotate"> 
     <RotateTransform Angle="270" /> 
     <TranslateTransform Y="200" /> 
    </TransformGroup> 
</Window.Resources> 
<StackPanel Orientation="Vertical"> 
    <ItemsControl ItemsSource="{Binding MyStrings}" HorizontalAlignment="Left" > 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Horizontal"/> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Border BorderThickness="1" BorderBrush="Black" Width="200" Height="20" RenderTransform="{StaticResource Rotate}" > 
        <TextBlock Text="{Binding }" > 
        </TextBlock> 
       </Border> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</StackPanel> 
</Window> 

et le code est derrière juste ...

utilisant System.Collections.Generic; en utilisant System.Windows;

namespace WpfApplication1 
{ 
/// <summary> 
/// Interaction logic for Window1.xaml 
/// </summary> 
public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     MyStrings = new List<string> {"monkey", "turtle", "rabbit"}; 
     InitializeComponent(); 
    } 

    public List<string> MyStrings { get; set; } 

} 
} 

Répondre

5

Utilisation LayoutTransform au lieu de RenderTransform. Cela assurera que la logique de mise en page prend en compte l'emplacement transformé des éléments.

<Border BorderThickness="1" BorderBrush="Black" Width="200" Height="20" LayoutTransform="{StaticResource Rotate}"> 
+0

Merci beaucoup, parfait! –

Questions connexes