2014-12-15 13 views
14

Tôi có một cửa sổ với không gian tên sauThành viên "CurrentCulture" không được công nhận hoặc không thể truy cập

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

có chứa một hộp

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

theo Gusdor's trả lời StringFormat Localization issues in wpf được làm việc tốt nhưng bây giờ Visual Studio (2013) là cho tôi một "Đánh dấu không hợp lệ" - Thành viên "CurrentCulture" không được công nhận hoặc không thể truy cập lỗi.

Intellisense nhận ra và nhắc nhở sysglb: CultureInfo.CurrentCulture nhưng ngay sau khi tôi di chuyển ra khỏi hộp văn bản, tôi nhận được lỗi.

Một số linh hồn có thể tư vấn tại sao điều này xảy ra và những gì tôi làm để khắc phục sự cố? Ngoài ra cách trình soạn thảo XAML quản lý để nhận ra sysglb: CultureInfo.CurrentCulture chưa đánh dấu không?

Cheers Geoff

+0

Bạn biết điều gì. Tôi vừa mới nâng cấp lên VS 2015 và đã bắt đầu bị lỗi này. Thật mỉa mai! Bạn đã sửa nó à? – Gusdor

+1

@Gusdor Đó không phải là mỉa mai – Dai

+0

Thay đổi khung mục tiêu dự án thành .NET Framework 4.6 hoặc cao hơn giải quyết vấn đề cho VS2013 & VS2015. – kmb

Trả lời

7

Không thể nhớ nơi tôi đã nhận này từ nhưng nó hoạt động

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

Thay đổi khuôn khổ mục tiêu dự án .NET Framework 4.6 hoặc cao hơn giải quyết vấn đề này.

Đi tới trình khám phá giải pháp và nhấp chuột phải vào Dự án bị ảnh hưởng -> Thuộc tính -> Ứng dụng -> Khung mục tiêu.

+1

Cảm ơn, nhưng không phải là một tùy chọn ở giai đoạn này –

0

tìm thấy similar suggestion trong chủ đề này: WPF StringFormat={0:C} showing as dollars

ứng dụng của tôi đang làm việc khi tôi đưa ra nó và diplayed giá trị với định dạng văn hóa chính xác, nhưng nhà thiết kế không thể tìm thấy CultureInfo.CurrentUICulture và đâm

tôi đã sử dụng tài sản tĩnh trong lớp helper

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

và sử dụng nó trong các ràng buộc: ConverterCulture={x:Static helpers:WpfHelpers.CurrentCulture}

Tôi đặt thuộc tính đó trên Khởi động ứng dụng

WpfHelpers.CurrentCulture = 
Thread.CurrentThread.CurrentCulture = 
Thread.CurrentThread.CurrentUICulture = new CultureInfo ... 
Các vấn đề liên quan