2013-08-06 15 views
7
格式字符串提示在DataGridTextColumn

目前我需要格式化數據單元格列類型的工具提示字符串DataGridTextColumn
這是我的嘗試:如何在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> 

我也試過:

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

但它們都不起作用。
例如,號碼3應顯示爲03。有什麼想法嗎?

+0

如果有不尋常的或複雜的字符串格式化要求,我一直在使用一個值轉換器(通過ConverterParameter屬性傳入格式化提示)*或*在虛擬機中設置字符串圖像。 –

+0

@GarryVass ViewModel中的轉換器或字符串格式化屬性應該是合理的,但問題是我無法觸及任何源代碼。他們說我只能編輯XAML文件,違揹我的意願。 – R4j

+0

施加給某人多可怕的事!無論如何,這意味着您將不得不在Xaml中詳細說明完整的工具提示模板。 –

回答

5

試試這個:

<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是這一招的描述。 Quote:

工具提示是一個內容控制,這意味着它並沒有真正的顯示模型。由於TextBox被設計爲顯示文本,因此StringFormat綁定屬性按照廣告方式工作。 Button就是這樣的另一個例子。 (都來自ContentControl)。

的想法是StringFormatToolTip賺來的,你需要設置ContentControlTextBlock

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

給你的主要事情是設置力ContentControlToolTip,不一定,因爲在我的例子中(與DataGridTemplateColumn)。

+0

因此'DataGridTextColumn'不能用於這種情況?我必須使用'DataGridTemplateColumn'嗎? – R4j

+0

@ R4j:請參閱我的編輯。 –

1

我有一個DataGridHyperlinkColumn類似的問題,我不想更改爲DataGridTemplateColumn,所以我想出了我認爲是更好的解決方案。所有你需要做的是打出來的Value的設置在<Setter...>並把內容在TextBlock這樣的:

<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>