成员"CurrentCulture"未被识别或无法访问。

17

我有一个命名空间为以下内容的窗口

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

包含文本框的

<TextBox Text="{Binding Path=Price, Mode=TwoWay, StringFormat='C',
                 ConverterCulture={x:Static sysglb:CultureInfo.CurrentCulture}}"
                MaxLines="1" TextAlignment="Right"/>
根据 GusdorWPF StringFormat本地化问题 的回答,一切都正常工作,但现在 Visual Studio (2013) 给出了“无效标记”的错误 - 成员“CurrentCulture”未被识别或无法访问。

Intellisense会识别和提示sysglb:CultureInfo.CurrentCulture,但是当我移开文本框时就会出错。

请问有什么善心的人能够说明发生了什么,并告诉我该怎么解决?另外,XAML编辑器如何识别sysglb:CultureInfo.CurrentCulture,而标记却不识别?

谢谢,Geoff


你知道吗,我刚刚升级到了VS 2015,然后开始出现这个错误。多么讽刺啊!你解决了吗? - Gusdor
1
@Gusdor 这不是反讽。 - Dai
将项目目标框架更改为.NET Framework 4.6或更高版本可解决VS2013和VS2015的问题。 - kmb
据我所知,这是VS2015中的一个错误。我正在以与您相同的方式使用ConverterCulture,并针对.NET 4.5。设计师会崩溃,但项目仍然可以构建和运行。作为一种解决方法,暂时删除ConverterCulture以使设计师再次正常工作。 - p10ben
3个回答

8

我不记得这段代码是从哪里来的,但它确实有效

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;
        }
    }
}

5

将项目目标框架更改为.NET Framework 4.6或更高版本即可解决此问题。

前往解决方案资源管理器,在受影响的项目上单击右键 -> 属性 -> 应用程序 -> 目标框架。


1
谢谢,但在这个阶段不是一个选项。 - Geoff Scott

3
在这个主题中发现了类似的建议,主题是:WPF StringFormat={0:C} 显示为美元 当我启动应用程序并显示正确的区域设置格式化值时,它可以正常工作,但设计师无法找到CultureInfo.CurrentUICulture并崩溃了。
我在助手类中使用了静态属性。
public static class WpfHelpers
{
    public static CultureInfo CurrentCulture { get; set; }
}

并在绑定中使用它:ConverterCulture={x:Static helpers:WpfHelpers.CurrentCulture}

我在应用程序启动时设置了该属性

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接