2014-12-15 2 views
14

Ich habe ein Fenster mit dem folgende NamespaceDas Element „Current“ nicht erkannt wird oder nicht zugänglich ist

xmlns:sysglb="clr-namespace:System.Globalization;assembly=mscorlib" 

, die eine Textbox

<TextBox Text="{Binding Path=Price, Mode=TwoWay, StringFormat='C', 
       ConverterCulture={x:Static sysglb:CultureInfo.CurrentCulture}}" 
       MaxLines="1" TextAlignment="Right"/> 

gemäß Gusdor's Antwort auf StringFormat Localization issues in wpf enthält, die Arbeit wurde Gut, aber jetzt Visual Studio (2013) gibt mir ein "Ungültiges Markup" - Das Mitglied "CurrentCulture" wird nicht erkannt oder ist nicht zugänglich Fehler.

Die IntelliSense erkennt und fordert sysglb: CultureInfo.CurrentCulture an, aber sobald ich mich aus der Textbox entferne, erhalte ich den Fehler.

Könnte eine gute Seele erklären, warum das passiert und was ich mache, um es zu reparieren? Auch wie der XAML-Editor sysglb erkennt: CultureInfo.CurrentCulture noch das Markup nicht?

Prost Geoff

+0

Sie wissen, was. Ich habe gerade auf VS 2015 aktualisiert und habe angefangen, diesen Fehler zu bekommen. Wie ironisch! Hast du es repariert? – Gusdor

+1

@Gusdor Das ist keine Ironie – Dai

+0

Das Ändern des Projektzielframeworks auf .NET Framework 4.6 oder höher löst das Problem für VS2013 und VS2015. – kmb

Antwort

7

Kann mich nicht erinnern, wo ich dies aus bekam, aber es funktioniert

using System.Globalization; 
using System.Windows.Data; 

namespace SomeNamespace 
{ 
    /// <summary> 
    /// This class is a fudge because 
    /// 
    ///   xmlns:sysglb="clr-namespace:System.Globalization;assembly=mscorlib" 
    ///   
    ///   <TextBox Grid.Row="2" Grid.Column="1" 
    ///    Text="{Binding Path=SelectedSupporterCategory.Price, Mode=TwoWay, StringFormat='C', 
    ///    ConverterCulture={x:Static sysglb:CultureInfo.CurrentCulture}}" 
    ///    UseLayoutRounding="True" MaxWidth="100" HorizontalAlignment="Left" MinWidth="100" HorizontalContentAlignment="Right"/> 
    /// 
    ///  is giving 
    ///    Error 29 "The member "CurrentCulture" is not recognized or is not accessible." 
    /// 
    /// Instead we use 
    /// 
    ///   <TextBox Grid.Row="2" Grid.Column="1" 
    ///    Text="{CultureAwareBinding Path=SelectedSupporterCategory.Price, Mode=TwoWay, StringFormat='C',}" 
    ///    UseLayoutRounding="True" MaxWidth="100" HorizontalAlignment="Left" MinWidth="100" HorizontalContentAlignment="Right"/> 
    /// 
    /// </summary> 
    public class CultureAwareBinding : Binding 
    { 
     public CultureAwareBinding() 
     { 
      ConverterCulture = CultureInfo.CurrentCulture; 
     } 
    } 
} 
4

das Projektziel Framework .NET Framework 4.6 oder höher ändern, das Problem löst.

Gehen Sie zum Lösungsexplorer und klicken Sie mit der rechten Maustaste auf das betroffene Projekt -> Eigenschaften -> Anwendung -> Zielframework.

+1

Danke, aber in diesem Stadium keine Option –

0

gefunden similar suggestion in diesem Thema: WPF StringFormat={0:C} showing as dollars

meine Anwendung arbeiten, als ich es ins Leben gerufen und diplayed Werte mit dem richtigen Kultur Formatierung, aber Designer nicht CultureInfo.CurrentUICulture finden konnten und abgestürzt

ich statische Eigenschaft in Helper-Klasse verwendet

public static class WpfHelpers 
{ 
    public static CultureInfo CurrentCulture { get; set; } 
} 

und verwendet es in Bindings: ConverterCulture={x:Static helpers:WpfHelpers.CurrentCulture}

Ich habe diese Eigenschaft beim Start Anwendung

WpfHelpers.CurrentCulture = 
Thread.CurrentThread.CurrentCulture = 
Thread.CurrentThread.CurrentUICulture = new CultureInfo ...