2009-09-24 6 views
0

J'ai un Itemscontrol, qui contient deux éléments après la liaison. Mon problème est que le deuxième élément sort de la zone de la fenêtre.Rapprocher des éléments dans ItemsControl

Ma question est - comment puis-je rapprocher les textes des éléments sans réduire la taille de la police ou augmenter la hauteur de la fenêtre? Y a-t-il quelque chose comme le rembourrage et la marge du HTML? ou peut-être un autre truc?

p.s - la taille de la police et la hauteur de la fenêtre ne doivent pas être modifiées.

C'est à quoi il ressemble: alt text http://img2.timg.co.il/forums/1_133961330.png

Et ceci est le code:

<UserControl x:Class="WpfApplication4.AnnouncmentsControl" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Height="86" Width="300"> 
<Grid> 
    <ItemsControl Name="announcmentsListBox" ItemsSource="{Binding}"> 
    </ItemsControl> 
</Grid> 

+0

Vous pouvez conserver la taille de la police et la hauteur de la fenêtre si vous modifiez la Hauteur du TextBlock à une valeur plus petite ... Mais je ne pense pas que ce que vous cherchez: p – Zenuka

+0

En aparté, vous pouvez supprimer la 'Grille' à partir de ce XAML. Cela n'ajoute rien. –

+0

Vous avez raison Drew, 10x pour cela de côté – Erez

Répondre

1

Votre TextBlock a une hauteur ensemble de 40 unités. Si vous supprimez complètement cet attribut, vous verrez les éléments plus naturellement.

Ainsi, votre XAML ressemblerait plus à ceci:

<Grid> 
    <ItemsControl Name="announcmentsListBox" ItemsSource="{Binding}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <StackPanel> 
        <TextBlock Text="{Binding Path=Text}" /> 
        <Button /> 
       </StackPanel> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</Grid> 
+0

Désolé homme, mais j'ai posté au début le code incorrect maintenant c'est le vrai – Erez

+0

Il n'y a pas assez d'informations dans votre question pour dire ce qui se passe plus. Par exemple, quel type d'objet est lié au contrôle des éléments? Quels modèles de données sont sélectionnés pour ce type? –

+0

Hi Drew, L'objet qui est lié au contrôle des éléments est une liste d'une classe que j'ai écrite et la liste hérite de ObservableCollection, Je n'ai utilisé aucun DataTemplates. – Erez

0

Je vous conseille d'utiliser Mole Visualiseur pour examiner les éléments générés. Mole 4.2 peut être téléchargé à partir de http://karlshifflett.wordpress.com/mole-for-visual-studio/

Juste besoin de copier "Mole.Visualizer.dll" dans le dossier visualizer approprié.

Si vous développez sur Vista et sont en cours d'exécution avec sécurité Elevated est activé, vous devez installer Mole dans le répertoire suivant .

* {VS Install path}\Common7\Packages\Debugger\Visualizers 

Tous les autres télécharger et décompressez le package ci-dessus. Copiez le fichier dans le package de sortie soit:

* My Documents\Visual Studio 2005\Visualizers {VS2005} 
* My Documents\Visual Studio 2008\Visualizers {VS2008} 

Vous pouvez définir un point de rupture quelque part dans le code qui est facilement accessible, puis lancez le Visualiseur Mole sur un objet. Naviguez dans l'arborescence visuelle vers ItemsControl. Recherchez les valeurs dans Margin et Padding pour les TextBlocks générés. Il vous indiquera également si les valeurs sont héritées ou locales, etc.

0

Utilisez un remplissage à 0. Vous pouvez également définir des marges négatives qui, dans de nombreux cas, sont le seul moyen de forcer le texte dans certaines mises en page (où Padding doesn Vous pouvez également implémenter votre propre gabarit de panneau d'articles et redéfinir la disposition de chaque article pour compenser le rembourrage introduit, mais cela ne devrait pas être le cas. nécessaire. Cela vous permettrait cependant de contrôler le calcul de la mise en page de tous les éléments afin de mieux adapter chaque élément (et même d'aller encore plus loin et d'implémenter de nouvelles mises en page folles comme un carrousel, comme cela a été démontré par de nombreux pré-RTM vidéos de WPF/Avalon.)

Espérons que ça aide, c'est ce que je fais.

+0

Je suppose qu'il vaut la peine de mentionner que vous avez besoin implémenter un modèle d'éléments pour contraindre correctement un remplissage négatif. Alternativement, vous pouvez appliquer les paramètres sur le parent, bien que dans mon expérience c'est quelque chose que vous devrez refaire à l'avenir. Le bon moyen d'afficher les éléments de la liste est de les modéliser, en supposant que l'aspect et la convivialité par défaut ne sont pas adéquats (ou dans votre cas, cela ne vous semble pas souhaitable). –

Questions connexes