我有一个.NET 4.0 WPF应用程序,用户可以在其中更改语言(文化)我只是让用户选择一种语言,创建一个相应的CultureInfo并设置:
Thread.CurrentThread.CurrentCulture = cultureInfo;
Thread.CurrentThread.CurrentUICulture = cultureInfo;
Run Code Online (Sandbox Code Playgroud)
在C#代码中,这很好用.然而,在WPF控制中,文化仍然是美国的.这意味着例如日期将以美国格式显示,而不是对当前文化正确的日期.
显然,这不是一个错误.根据MSDN和StackOverflow上的一些博客文章和文章,WPF语言不会自动遵循当前的文化.在您执行此操作之前,它是en-US:
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.IetfLanguageTag)));
Run Code Online (Sandbox Code Playgroud)
请参阅wpf中的StringFormat Localization问题.
我不完全理解这里发生了什么.似乎所有frameworkelements上的Language属性都设置为当前文化.无论如何,它的工作原理.我在应用程序启动时执行此操作,现在所有控件都按预期工作,例如日期根据当前文化格式化.
但现在的问题是:根据MSDN FrameworkElement.LanguageProperty.OverrideMetadata只能调用一次.事实上,如果我再次调用它(当用户更改语言时),它将抛出异常.所以我还没有真正解决我的问题.
问题:如何在我的应用程序生命周期中不止一次地和可靠地更新WPF中的文化?
(我在研究时发现了这个:http://www.nbdtech.com/Blog/archive/2009/03/18/getting-a-wpf-application-to-pick-up-the-correct-regional.aspx and it似乎他有一些工作在那里.但是,我无法想象如何在我的应用程序中执行此操作.似乎我必须在所有打开的窗口和控件中更新语言并刷新所有现有绑定等.)
我有一个使用MVVM模式的WPF应用程序,当它忙于做一些用户必须等待的事情时,有时必须显示一个等待标记.感谢本页面上的答案组合:在应用程序繁忙时显示沙漏,我有一个几乎可以工作的解决方案(尽管它在精神上并不是真正的MVVM).每当我在视图模型中做一些耗时的事情时,我会这样做:
using (UiServices.ShowWaitCursor())
{
.. do time-consuming logic
this.SomeData = somedata;
}
Run Code Online (Sandbox Code Playgroud)
(ShowWaitCursor()返回一个显示waitcursor的IDisposable,直到它被处理掉.)我的例子中的最后一行是我设置一些属性的地方.此属性绑定在我的XAML中,例如:
<ItemsControl ItemsSource="{Binding SomeData}" />
Run Code Online (Sandbox Code Playgroud)
但是,由于这可能是一个很长的对象列表,有时候会有复杂的数据模板等,实际的绑定和渲染有时需要相当长的时间.由于此绑定发生在using语句之外,因此waitcursor将在用户实际等待结束之前消失.
所以我的问题是如何在WPF MVVM应用程序中进行等待,将数据绑定考虑在内?
我是一个相当有经验的开发人员(.NET,C#,XML,Web服务,HTML,Javascript,各种数据库等),他们在SharePoint中负责一个新项目.我对SharePoint一无所知.我的问题是:对于有经验的开发人员来说,开始学习SharePoint 2007的最佳方式是什么.我不是在寻找很长的书籍或网站列表,我可以自己谷歌,或者一般的学习建议,但是从最近学过SharePoint的人.这可能是关于我真正应该阅读的一篇特定文章的建议,或者我的第一个学习项目应该是什么,或者是一个几乎每个人都陷入困境的陷阱
我通过Glass.Mapper创建一个Sitecore项目,如下所示:
var homeItem = sitecoreContext.GetHomeItem<HomeItem>();
// Create the car item
ICar car = sitecoreService.Create(homeItem.BooksFolder, new Car { Tires = 4, Seats=4});
Run Code Online (Sandbox Code Playgroud)
这是有效的,除了Car模板上的标准值没有应用 - 或者如果它们被新的Car属性立即覆盖.因此,如果Car对象的Color属性值为null,则将此null写入字段,而不是Car模板上标准值的"绿色"值.
我已经通过Glass.Mapper寻找一种明智的方法来做到这一点,但什么都没发现.有没有办法通过Glass.Mapper来做到这一点?
我事先不知道文本块中文本的宽度,我希望文本块像这样对齐,同时仍然使各个行左对齐:
Mr. Petersen |
Elmstreet 9 |
888 Fantastic City|
Run Code Online (Sandbox Code Playgroud)
(|告知文档的右边缘)
它应该很简单,但我无法弄清楚.
我试图将所有文本放在一个段落中并设置paragraph.Alignment = Element.ALIGN_RIGHT,但这将使各个行正确对齐.
我试图将段落放在表格内的单元格中,并右对齐单元格,但单元格只占据表格的整个宽度.
如果我可以创建一个只需要所需宽度的容器,我可以简单地右对齐这个容器,所以也许这就是我的问题.
.net ×2
c# ×2
wpf ×2
glass-mapper ×1
itext ×1
localization ×1
mvvm ×1
sharepoint ×1
sitecore ×1
sitecore7 ×1