[英]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.