【问题标题】:How to format string for tooltip in DataGridTextColumn in WPF如何格式化WPF中DataGridTextColumn中工具提示的字符串
【发布时间】:2013-08-06 09:39:43
【问题描述】:

目前我需要格式化数据单元格列类型DataGridTextColumn中的工具提示字符串
这是我的尝试:

<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。有什么想法吗?

【问题讨论】:

  • 如果有异常或复杂的字符串格式要求,我一直在使用值转换器(通过 ConverterParameter 属性传入格式提示)或在虚拟机。
  • @GarryVass ViewModel 中的转换器或字符串格式属性应该是有意义的,但问题是我无法触及任何源代码。他们说我只能违背我的意愿编辑 XAML 文件。
  • 强加给某人是多么可怕的事情!无论如何,这意味着您必须在 Xaml 中指定完整的工具提示模板。

标签: c# .net wpf


【解决方案1】:

试试这个:

<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 是对这个技巧的描述。引用:

工具提示是一个内容控件,这意味着它实际上没有显示模型。由于 TextBox 旨在显示文本,因此 StringFormat 绑定属性按宣传的方式工作。按钮是另一个例子。 (两者都派生自 ContentControl)。

思路是把StringFormat赚到ToolTip,需要设置ContentControl和TextBlock:

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

对您来说主要是在ToolTip 中设置力ContentControl,不一定,如我的示例(使用DataGridTemplateColumn)。

【讨论】:

  • 所以DataGridTextColumn 不能用于这种情况?我必须使用DataGridTemplateColumn 吗?
【解决方案2】:

DataGridHyperlinkColumn 也有类似的问题,我不想更改为 DataGridTemplateColumn,所以我想出了一个我认为更好的解决方案。您所要做的就是在您的&lt;Setter...&gt; 中打破Value 的设置并将内容放入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>

【讨论】:

    猜你喜欢
    • 2011-06-17
    • 2016-04-03
    • 2021-12-13
    • 2020-08-31
    • 2019-06-10
    • 2017-04-17
    • 2019-02-02
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多