带有Label和ContentStringFormat的UserControl作为绑定

时间:2016-12-16 11:06:44

标签: wpf user-controls

我有一个包含Label的Usercontrol。我将Content-Property绑定到double,将ContentStringFormat-Property绑定到String。我用它来显示百分比值,但格式必须是可配置的。

以下是特定部分的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" />

它按预期工作,但有一个特定的问题。逗号不是我所期望的。

如果我的系统包含&#39; de-de&#39;我希望它是:

    expected     shown
    25,3         25.3

我该如何解决这个问题?我alredy尝试使用CurrentCulture添加covnerterCulture,但这显示错误(它仍然使用点而不是逗号):

  

Das Element&#34; CurrentCulture&#34; wurde nicht erkannt,oder es kann nicht auf das Element zugegriffen werden。

其翻译也是如此:

  

元素&#34; CurrentCulture&#34;未被识别,或无法访问该项目。

我该如何解决这个问题? StringFormat必须是可绑定的。

2 个答案:

答案 0 :(得分:2)

FrameworkElement类有一个Language属性,可以绑定到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;

但是如果你想要它是动态的,你也可以在你的源对象中添加另一个属性,它返回一个已根据你的“FontFormat”和特定文化格式化的字符串,例如:

    public string FormattedValuePercentage
    {
        get
        {
            return ValuePercentage.ToString(FontFormat, new System.Globalization.CultureInfo("de-DE"));
        }
    }

...并直接将Label的Content属性绑定到此属性:

<Label Name="lbl_percent"
   Content="{Binding FormattedValuePercentage, ElementName=userControl}" />

答案 1 :(得分:1)

您可以将Label的Language属性绑定到视图模型中XmlLanguage类型的属性:

public class ViewModel
{
    public XmlLanguage Language { get; set; } = XmlLanguage.GetLanguage("de");
    ...
}

XAML:

<Label ... Language="{Binding Language}" />