簡體   English   中英

如何從 XAML 中的字符串中去除第一個字符

[英]How to Strip First Character From String in XAML

我有一個詞,“未分配”,其中第一個字符是我們用來按字母順序對列表進行排序的隱藏字符。 我們如何使用 XAML 刪除此字符? 以下是我們目前如何刪除它:

<DataTrigger Binding="{Binding Name}" Value="Ј Unassigned">
   <Setter Property="Template">
      <Setter.Value>
         <ControlTemplate TargetType="{x:Type GroupItem}">
            <Expander IsExpanded="True" Style="{StaticResource ExpanderBase}">
               <Expander.Header>
                  <TextBlock FontSize="18" FontStyle="Italic">
                     <TextBlock.Text>
                        <MultiBinding StringFormat="{}{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}">
                           <Binding Path="Name[2]"/>
                           <Binding Path="Name[3]"/>
                           <Binding Path="Name[4]"/>
                           <Binding Path="Name[5]"/>
                           <Binding Path="Name[6]"/>
                           <Binding Path="Name[7]"/>
                           <Binding Path="Name[8]"/>
                           <Binding Path="Name[9]"/>
                           <Binding Path="Name[10]"/>
                           <Binding Path="Name[11]"/>
                        </MultiBinding>
                     </TextBlock.Text>
                  </TextBlock>
               </Expander.Header>
               <ItemsPresenter/>
            </Expander>
         </ControlTemplate>
      </Setter.Value>
   </Setter>
</DataTrigger>

運行時,它會將“Ј Unassigned”轉換為“Unassigned”。

有沒有辦法在 XAML 中做到這一點,或者必須使用 C# 轉換器來完成。

我認為沒有 XAML-only 的方法,但使用值轉換器將是一個很好的解決方案。 它比您的多綁定示例靈活得多,因為它允許綁定string可變長度。 如果經常使用,您可以將其轉換為單獨的標記擴展。

public class RemoveHiddenCharacterConverter : IValueConverter
{
   public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
   {
      if (value == null)
         return null;

      var text = ((string)value);
      return text.Length < 2 ? string.Empty : text.Substring(2);
   }

   public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
   {
      throw new InvalidOperationException();
   }
}

您必須在ResourceDictionary創建此轉換器的實例,然后才能像這樣使用它。

<TextBlock Text="{Binding Name, Converter={StaticResource RemoveHiddenCharacterConverter}}"/>

當然,另一種選擇是重新考慮字符前綴的概念並以另一種方式解決該問題,而不是解決它,如果您不依賴它的話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM