2013-08-06 21 views
7

Attualmente ho bisogno di formattare la stringa tooltip nel tipo di colonna cella di dati DataGridTextColumn
Qui è la mia prova:Come formattare stringa per tooltip in DataGridTextColumn in WPF

<DataGrid.Columns> 
    <DataGridTextColumn Header ="Count Number"> 
     <DataGridTextColumn.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="ToolTip" 
        Value="{Binding CountNumber, StringFormat={}{0:00}}"> 
      </Setter> 
      </Style> 
     </DataGridTextColumn.CellStyle> 
     <DataGridTextColumn.Binding> 
      <Binding Path="CountNumber" StringFormat="{}{0:00}" UpdateSourceTrigger="PropertyChanged" /> 
     </DataGridTextColumn.Binding> 
    </DataGridTextColumn> 

    <!-- other columns--> 
</DataGrid.Columns> 

Ho anche provato:

<DataGridTextColumn.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="ToolTip" Value="{Binding CountNumber}"/> 
      <Setter Property="ToolTip.ContentStringFormat" Value="{}{0:00}"/>     
     </Style> 
</DataGridTextColumn.CellStyle> 

Ma entrambi non funzionano.
Ad esempio, il numero 3 deve essere visualizzato come 03. C'è qualche idea?

+0

Se non ci sono requisiti di formattazione stringa insoliti o complessi, sono stato utilizzando un convertitore di valori (con suggerimenti per la formattazione passati tramite l'attributo ConverterParameter) * o * impostazione dell'immagine della stringa nella VM. –

+0

@GarryVass un convertitore o una proprietà formattata a stringa in ViewModel dovrebbe avere senso, ma il problema è che non riesco a toccare alcun codice sorgente. Hanno detto che posso modificare solo il file XAML, contro la mia volontà. – R4j

+0

Che cosa orribile da imporre a qualcuno! In ogni caso, significa che dovrai specificare il modello completo del tooltip in Xaml. –

risposta

5

Prova questa:

<DataGridTemplateColumn Width="260" Header="MySample"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Age}"> 
       <TextBlock.ToolTip> 
        <ToolTip> 
         <TextBlock Text="{Binding Path=Age, StringFormat=0\{0\}}" /> 
        </ToolTip> 
       </TextBlock.ToolTip> 
      </TextBlock> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Here è una descrizione di questo trucco. Codice:

Una descrizione comando è un controllo contenuto, che significa che non ha un modello di visualizzazione. Poiché TextBox è progettato per visualizzare testo, la proprietà di associazione StringFormat funziona come pubblicizzato. Button è un altro esempio di questo. (Entrambi derivano da ContentControl).

L'idea è di StringFormat guadagnato in ToolTip, è necessario impostare la ContentControl con TextBlock:

<TextBlock.ToolTip> 
    <ToolTip> 
     <TextBlock Text="{Binding Path=Age, StringFormat=0\{0\}}" /> 
    </ToolTip> 
</TextBlock.ToolTip> 

La cosa più importante per voi è quello di impostare la forza ContentControl nel ToolTip, non necessariamente, come nel mio esempio (con DataGridTemplateColumn).

+0

Quindi 'DataGridTextColumn' non può funzionare per questo caso? Devo usare 'DataGridTemplateColumn'? – R4j

+0

@ R4j: Vedi la mia modifica. –

1

Ho avuto un problema simile con un DataGridHyperlinkColumn che non ho voglia di passare a un DataGridTemplateColumn così mi si avvicinò con quello che penso è una soluzione ancora migliore. Tutto quello che dovete fare è rompere l'impostazione del Value nel vostro <Setter...> e mettere il contenuto di una TextBlock come questo:

<DataGridTextColumn Header ="Count Number"> 
    <DataGridTextColumn.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="ToolTip"> 
       <Setter.Value> 
        <TextBlock Text="{Binding CountNumber, StringFormat={}{0:00}}" /> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </DataGridTextColumn.CellStyle> 
    <DataGridTextColumn.Binding> 
     <Binding Path="CountNumber" StringFormat="{}{0:00}" UpdateSourceTrigger="PropertyChanged" /> 
    </DataGridTextColumn.Binding> 
</DataGridTextColumn>