如果我有标签:
<Label Content="{StaticResource Foo}" />
有没有办法在xaml中添加*?
我正在寻找类似的东西:
<Label Content="{StaticResource Foo, stringformat={0}*" />
我从资源字典中放置控件的内容,因为该应用程序支持多种语言。我想知道是否可以在xaml中附加*,这样我就不必创建一个事件,然后在事件触发时附加它。
在资源词典中我有:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:system="clr-namespace:System;assembly=mscorlib"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<system:String x:Key="Foo">Name</system:String>
</ResourceDictionary>
在我的窗口中我有:(我合并了最后一本字典)
<Label Content="{StaticResource 'Foo'}" />
并显示名称
我希望标签显示名称*而不仅仅是名称
也许用风格来实现这一目标。
答案 0 :(得分:12)
有多种方法可以做到:
<Label Content="{StaticResource Foo}" ContentStringFormat='{}{0}*'/>
使用Binding with StringFormat(它仅适用于字符串属性,这就是为什么您需要使用TextBlock
作为Label
的内容)
<Label>
<TextBlock
Text="{Binding Source={StaticResource Foo}, StringFormat='{}{0}*'}"/>
</Label>
*
答案 1 :(得分:1)
感谢@nemesv回答这就是我最终的结果:
我创建了以下转换器:
using System;
using System.Windows.Data;
using System.Globalization;
namespace PDV.Converters
{
[ValueConversion(typeof(String), typeof(String))]
public class RequiredFieldConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value.ToString() + "*";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
var str = value.ToString();
return str.Substring(0, str.Length - 2);
}
}
}
在我的app.xaml文件中,我创建了资源
<Application x:Class="PDV.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml"
xmlns:conv="clr-namespace:PDV.Converters" <!-- Include the namespace where converter is located-->
>
<Application.Resources>
<ResourceDictionary >
<conv:RequiredFieldConverter x:Key="RequiredFieldConverter" />
</ResourceDictionary>
</Application.Resources>
</Application>
然后在我的应用程序的任何地方我都可以使用该转换器:
<Label Content="{Binding Source={StaticResource NameField}, Converter={StaticResource RequiredFieldConverter} }" />