【问题标题】:how to trim binding data using string format如何使用字符串格式修剪绑定数据
【发布时间】:2016-12-19 22:14:11
【问题描述】:

我有一个带有 datagridview 的有界数据库,我正在尝试使用 stringFormat 修剪有界字符串,但我不知道该怎么做。 (我不会在 c# 文件中创建一个属性并修剪它)

<DataGridTextColumn  Binding="{Binding type}"    Width="100" HeaderStyle="{StaticResource HeaderStyle}"   ElementStyle="{StaticResource dataGridElementStyle}"  />

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    您有多种方法可以实现这一目标。您可以创建一个自定义CellStyle,您可以在DataGrid.Resources 中设置一个Style Template 以通过整个DataGrid 来访问TextBlockTargetType(这是DataGridTextColumn 在运行时呈现的内容)。一般来说,如果您只希望在单个实例上使用它,我会做这样的事情,这是我假设您正在尝试做的事情。

    <DataGridTextColumn Binding="{Binding type}" Width="100">
       <DataGridTextColumn.ElementStyle>
          <!-- Since it's already set as "NoWrap" by default, 
               just need to set trimming which will be invoked 
               by your set width you already have. -->
          <Style TargetType="{x:Type TextBlock}">
             <Setter Property="TextTrimming" Value="CharacterEllipsis"/>
          </Style>
       </DataGridTextColumn.ElementStyle>
    </DataGridTextColumn>
    

    或者像这样;

      <DataGridTemplateColumn>
         <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
               <TextBlock TextTrimming="Character Ellipses"
                          Text="{Binding type}"/>
            </DataTemplate>
         </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    

    ..或其他方式。只需要以一种或另一种方式达到最终结果TextBlock

    此外,由于您已经将 ElementStyle 指定为资源,您可以将示例添加到其中,尽管我从该示例中删除了它以使其内联。需要查看您的资源,以便我向您展示。

    希望对你有所帮助,节日快乐。

    【讨论】:

      【解决方案2】:

      你有几个选择来实现你想要的。不幸的是,您不能在绑定中使用字符串格式表达式来修剪文本。也就是说,我会给你一些选择,但我认为最简单的是你说你不会创建的属性。

      选项 1:使用转换器: 您可以创建一个转换器并在绑定中使用它:

      TrimTextConverter: IValueConverter{
          public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
          {
              //Trim your text here
          }   
      }
      

      优点: 使用时可读性强,可以清楚地看到意图: &lt;DataGridTextColumn Binding="{Binding type, Converter={StaticResource TrimTextConverter}}" .../&gt;

      缺点:

      1. 您需要小心,因为如果您在绑定中设置 UpdateSourceTrigger=PropertyChanged,此转换器将阻止您添加任何空格。
      2. 您需要为该功能创建另一个类。

      选项 2:创建您自己的 DataGridTrimmedTextColumn(继承):

      这样就可以继承DataGridTextColumn,实现裁剪的功能。在这种情况下(再次)做了很多工作。

      选项 3:绑定到具有修剪值的属性:

      您不想创建的属性。但正如我一开始所说,这可能是最简单的方法。

      希望这会有所帮助!

      【讨论】:

        【解决方案3】:

        XAML 是一种标记 语言。它真的没有办法修剪字符串。应用 StringFormat 与能够调用某些方法(如 Trim())来操作字符串不同,并且不能在 XAML 中调用方法。

        您应该按照此处的建议使用值转换器来修剪值:

        Clear whitespace from end of string in WPF/XAML

        或者你应该从你的源属性中返回一个已经修剪过的字符串。

        编辑:如果您在文本长度超出可用内容区域时能够绘制省略号代替剩余文本的上下文中引用修剪,则可以设置 TextTrimming 属性Chris W 建议的 ElementStyle。

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-05
        • 1970-01-01
        • 2010-09-16
        • 2010-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多