Kim Homann Kim Homann -4 years ago 94
C# Question

Why can't I use CultureInfo.CurrentCulture in XAML at design time?

I have the following XAML:

<TextBlock Text="{Binding Source={x:Static s:DateTime.Now}, StringFormat=Date: {0:dddd, MMMM dd}}"/>

works fine at runtime as well as in design mode (Visual Studio 2015 Enterprise).

But if I try the same with
, then this works at runtime only and gives me an error in design mode (

<TextBlock Text="{Binding Source={x:Static s:DateTime.Now}, ConverterCulture={x:Static c:CultureInfo.CurrentCulture}, StringFormat=Date: {0:dddd, MMMM dd}}"/>

I'm not looking for a workaround. I am only trying to understand the difference between
and why one of them works and the other one doesn't.

Answer Source

I know you did not ask for a workaround and I cannot answer your original question.

I still want to post my solution in case others, like me, stumble across your question looking for a workaround.

If you set your ConverterCulture in a CustomBinding class and use this CustomBinding instead of Binding in you xaml, it works at design time too.

public class CultureAwareBinding : System.Windows.Data.Binding
    public CultureAwareBinding()
        ConverterCulture = CultureInfo.CurrentCulture;

You can use it in your xaml like this.

<TextBlock Text="{CultureAwareBinding Source={x:Static s:DateTime.Now}, StringFormat=Date: {0:dddd, MMMM dd}}"/>

As an additional benefit this allows you to change the ConverterCulture later in one single place if needed. Also you can set other properties like StringFormat like this.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download