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

时间:2016-12-19 22:14:12

标签: c# wpf xaml

我有一个带有datagridview的有限数据库,我正在尝试用stringFormat修剪有界字符串,但我没有找到如何做到这一点。 (我不会在c#文件中创建一个属性并修剪它)

select (case when UserID = '1' and RoleID = 1 then 1 else 0 end) as IsAdmin
from UserRoles

3 个答案:

答案 0 :(得分:1)

您有多种方法可以完成此任务。您可以创建自定义CellStyle,您可以在Style Template中设置DataGrid.Resources,以便通过整个DataGrid TargetType TextBlock点击DataGridTextColumn {1}}在运行时渲染)。一般来说,如果我只想在个别实例上做这样的事情,那就是我认为你正在尝试做的事情。

<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指定为资源,因此您可以将示例添加到该资源中,尽管我从此示例中将其剥离以使其内联。我需要看到你的资源给我看看。

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

答案 1 :(得分:0)

XAML是一种标记语言。它真的无法修剪弦乐。应用StringFormat与调用某个方法(如Trim())来操作字符串并不能调用XAML中的方法不同。

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

Clear whitespace from end of string in WPF/XAML

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

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

答案 2 :(得分:0)

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

  

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

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

PROS:使用它时可读,您可以清楚地看到意图: <DataGridTextColumn Binding="{Binding type, Converter={StaticResource TrimTextConverter}}" .../>

缺点:

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

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

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

      

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

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

    希望这有帮助!