2014-12-15 26 views
14

ho una finestra con il seguente spazio dei nomiIl socio "CurrentCulture" non viene riconosciuta o non è accessibile

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

che contiene una casella di testo

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

come da Gusdor's risposta a StringFormat Localization issues in wpf che stava lavorando bene ma ora Visual Studio (2013) mi sta dando un "Markup non valido" - Il membro "CurrentCulture" non è riconosciuto o non è accessibile errore.

Intellisense riconosce e richiede sysglb: CultureInfo.CurrentCulture ma non appena mi allontano dalla casella di testo viene visualizzato l'errore.

Potrebbe qualche anima gentile consigliare perché questo sta accadendo e cosa faccio per risolverlo? Anche come l'editor XAML riesce a riconoscere sysglb: CultureInfo.CurrentCulture ma il markup no?

Acclamazioni Geoff

+0

Sai cosa. Ho appena effettuato l'upgrade a VS 2015 e ho iniziato a ricevere questo errore. Che ironia! Hai aggiustato? – Gusdor

+1

@Gusdor Non è un'ironia – Dai

+0

La modifica del framework di destinazione del progetto in .NET Framework 4.6 o versioni successive risolve il problema per VS2013 e VS2015. – kmb

risposta

7

Non ricordo dove ho ricevuto questo da ma funziona

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

Cambiare il framework di destinazione progetto per .NET Framework 4.6 o superiore risolve il problema.

Passare a Solution Explorer e fare clic con il tasto destro del mouse sul progetto interessato -> Proprietà -> Applicazione -> Framework di destinazione.

+1

Grazie, ma non un'opzione in questa fase –

0

trovato similar suggestion in questa discussione: WPF StringFormat={0:C} showing as dollars

mia domanda funzionava quando ho lanciato e valori indicate con la formattazione cultura corretto, ma progettista non riuscivo a trovare CultureInfo.CurrentUICulture e sono caduto

ho usato proprietà statica nella classe helper

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

e utilizzati in attacchi: ConverterCulture={x:Static helpers:WpfHelpers.CurrentCulture}

Ho impostato tale proprietà all'avvio dell'applicazione

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