2008-11-19 10 views
0

Je cherche une méthode simple et idiomatique pour répliquer le signal visuel d'Excel qu'un nombre est trop grand pour être affiché dans une colonne. J'ai le XAML suivant:Remplacer des nombres avec des hachages dans WPF lorsque le texte est trop grand

<ListView.View> 
    <GridView> 
     <GridViewColumn ... /> 
    </GridView> 
<ListView.View> 

et ce que je voudrais est si le texte dans la colonne est trop petit pour être affiché (il est coupé), je veux remplacer les données affichées avec « # ' personnages.

Répondre

2

Vous pouvez associer plusieurs fois le contenu de la cellule au nombre réel, à la largeur de la colonne contenant et à la taille souhaitée du TextBlock. Ensuite, utilisez un convertisseur pour convertir sélectionner le contenu en conséquence. Pseduo-XAML:

<GridViewColumn.CellTemplate> 
    <DataTemplate> 
     <TextBlock x:Name="_textBlock"> 
      <TextBlock.Content> 
       <MultiBinding Converter="{StaticResource MyConverter}"> 
        <Binding Path="."/> 
        <Binding Path="ActualWidth" RelativeSource="{RelativeSource Ancestor, AncestorType={GridViewColumn}}"/> 
        <Binding Path="DesiredSize.Width" ElementName="_textBlock"/> 
       </MultiBinding> 
      </TextBlock.Content> 
     </TextBlock> 
    </Datatemplate> 
</GridViewColumn.CellTemplate> 

pseduo-code:

public class MyConverter : IMultiValueConverter 
{ 
    public object Convert(...) 
    { 
     object content = values[0]; 
     double actualWidth = (double)values[1]; 
     double desiredWidth = (double)values[2]; 

     if (desiredWidth > actualWidth) 
     { 
      return "######"; 
     } 

     return content; 
    } 
} 

Autre que cela, vous pouvez écrire votre propre TextBlock sous-classe qui fait une chose semblable automatiquement, puis l'utiliser dans chaque modèle de colonne.

Questions connexes