C# 如何使用字符串格式修剪绑定数据

C# 如何使用字符串格式修剪绑定数据,c#,wpf,xaml,C#,Wpf,Xaml,我有一个带有datagridview的有界数据库,我试图用stringFormat修剪有界字符串,但我没有找到如何做。 (我不想在c#文件中创建属性并对其进行修剪) XAML是一种标记语言。它真的没有办法修剪弦。应用StringFormat与能够调用某些方法(如Trim())来操作字符串是不同的,并且不能在XAML中调用方法 您应该使用值转换器来调整值,如下所示: 或者,应该从源属性返回已修剪的字符串 编辑:如果在文本长度超出可用内容区域时,在能够绘制省略号代替剩余文本的上下文中提及修剪,则

我有一个带有datagridview的有界数据库,我试图用stringFormat修剪有界字符串,但我没有找到如何做。 (我不想在c#文件中创建属性并对其进行修剪)


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

您应该使用值转换器来调整值,如下所示:

或者,应该从源属性返回已修剪的字符串


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

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

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

优点:当您使用它时,它是可读的,您可以清楚地看到它的意图:

缺点:

  • 您需要小心,因为如果在绑定中设置UpdateSourceTrigger=PropertyChanged,此转换器将阻止您添加任何空间
  • 您需要为这个功能创建另一个类
  • 选项2:创建您自己的DataGridTrimmedTextColumn(继承):

    通过这种方式,您可以继承DataGridTextColumn并实现修剪功能。在这种情况下(再次)做了这么多工作

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

    您不想创建的属性。但正如我在开始时所说的,也许是最简单的方法


    希望这有帮助

    实现这一点有多种方法。您可以创建一个自定义的
    CellStyle
    ,您可以在
    DataGrid.Resources
    中设置
    Style模板
    ,以在整个DataGrid中点击
    TextBlock
    TargetType
    (这是
    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被指定为资源,因此可以将该示例添加到其中,尽管我将其从该示例中剥离出来以使其内联。我需要看看你的资源,让我给你看

    希望这有帮助,节日快乐。

    是一个有很多元素的属性。
    <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>