带有标签和 ContentStringFormat 作为绑定的 UserControl
UserControl with Label and ContentStringFormat as Binding
我有一个包含标签的用户控件。我将 Content-属性 绑定到一个双精度数,并将 ContentStringFormat-属性 绑定到一个字符串。我用它来显示百分比值,但格式必须是可配置的。
这是特定部分的 XAML:
<Label Name="lbl_percent"
Content="{Binding ValuePercentage, ElementName=userControl}"
ContentStringFormat="{Binding ElementName=userControl, Path=FontFormat}"
Foreground="{Binding ElementName=userControl, Path=TextColor}"
HorizontalAlignment="Center" VerticalAlignment="Center"
RenderTransformOrigin="0.5,0.5" />
它按预期工作,但有一个特定问题。逗号不是我所期望的。
如果我有一个 'de-de' 的系统,我希望它是:
expected shown
25,3 25.3
我该如何解决这个问题?我已经尝试用 CurrentCulture 添加一个 covnerterCulture,但这显示了一个错误(它仍然使用点而不是逗号):
Das Element "CurrentCulture" wurde nicht erkannt, oder es kann nicht auf das Element zugegriffen werden.
这也翻译:
The Element "CurrentCulture" was not recognized, or the item could not be accessed.
我该如何解决这个问题? StringFormat 必须是可绑定的。
FrameworkElement class 有一种语言 属性,您可以将其绑定到 XmlLanguage 源 属性:
<Label Name="lbl_percent"
Content="{Binding ValuePercentage, ElementName=userControl}"
ContentStringFormat="{Binding ElementName=userControl, Path=FontFormat}"
Foreground="{Binding ElementName=userControl, Path=TextColor}"
HorizontalAlignment="Center" VerticalAlignment="Center"
RenderTransformOrigin="0.5,0.5"
Language="{Binding TheLang, ElementName=userControl}" />
private readonly System.Windows.Markup.XmlLanguage _lang = System.Windows.Markup.XmlLanguage.GetLanguage("de-DE");
public System.Windows.Markup.XmlLanguage TheLang => _lang;
但是,如果您希望它是动态的,您不妨将另一个 属性 添加到您的源对象中,该 returns 一个已经根据您的 "FontFormat" 格式化的字符串和一个特定文化,例如:
public string FormattedValuePercentage
{
get
{
return ValuePercentage.ToString(FontFormat, new System.Globalization.CultureInfo("de-DE"));
}
}
...并将 Label 的内容 属性 直接绑定到这个:
<Label Name="lbl_percent"
Content="{Binding FormattedValuePercentage, ElementName=userControl}" />
您可以将 Label 的 Language
属性 绑定到视图模型中 XmlLanguage
类型的 属性:
public class ViewModel
{
public XmlLanguage Language { get; set; } = XmlLanguage.GetLanguage("de");
...
}
XAML:
<Label ... Language="{Binding Language}" />
我有一个包含标签的用户控件。我将 Content-属性 绑定到一个双精度数,并将 ContentStringFormat-属性 绑定到一个字符串。我用它来显示百分比值,但格式必须是可配置的。
这是特定部分的 XAML:
<Label Name="lbl_percent"
Content="{Binding ValuePercentage, ElementName=userControl}"
ContentStringFormat="{Binding ElementName=userControl, Path=FontFormat}"
Foreground="{Binding ElementName=userControl, Path=TextColor}"
HorizontalAlignment="Center" VerticalAlignment="Center"
RenderTransformOrigin="0.5,0.5" />
它按预期工作,但有一个特定问题。逗号不是我所期望的。
如果我有一个 'de-de' 的系统,我希望它是:
expected shown
25,3 25.3
我该如何解决这个问题?我已经尝试用 CurrentCulture 添加一个 covnerterCulture,但这显示了一个错误(它仍然使用点而不是逗号):
Das Element "CurrentCulture" wurde nicht erkannt, oder es kann nicht auf das Element zugegriffen werden.
这也翻译:
The Element "CurrentCulture" was not recognized, or the item could not be accessed.
我该如何解决这个问题? StringFormat 必须是可绑定的。
FrameworkElement class 有一种语言 属性,您可以将其绑定到 XmlLanguage 源 属性:
<Label Name="lbl_percent"
Content="{Binding ValuePercentage, ElementName=userControl}"
ContentStringFormat="{Binding ElementName=userControl, Path=FontFormat}"
Foreground="{Binding ElementName=userControl, Path=TextColor}"
HorizontalAlignment="Center" VerticalAlignment="Center"
RenderTransformOrigin="0.5,0.5"
Language="{Binding TheLang, ElementName=userControl}" />
private readonly System.Windows.Markup.XmlLanguage _lang = System.Windows.Markup.XmlLanguage.GetLanguage("de-DE");
public System.Windows.Markup.XmlLanguage TheLang => _lang;
但是,如果您希望它是动态的,您不妨将另一个 属性 添加到您的源对象中,该 returns 一个已经根据您的 "FontFormat" 格式化的字符串和一个特定文化,例如:
public string FormattedValuePercentage
{
get
{
return ValuePercentage.ToString(FontFormat, new System.Globalization.CultureInfo("de-DE"));
}
}
...并将 Label 的内容 属性 直接绑定到这个:
<Label Name="lbl_percent"
Content="{Binding FormattedValuePercentage, ElementName=userControl}" />
您可以将 Label 的 Language
属性 绑定到视图模型中 XmlLanguage
类型的 属性:
public class ViewModel
{
public XmlLanguage Language { get; set; } = XmlLanguage.GetLanguage("de");
...
}
XAML:
<Label ... Language="{Binding Language}" />