目前我这样做:
public MainWindow()
{
InitializeComponent();
Title = Properties.Resources.WindowName;
}
如何通过WPF绑定做同样的事情?
编辑:它仍然无法在XAML中使用。
环境:VS2010,.NET 4.0,Windows 7.
复制步骤:
使用代码:
namespace ClassLibrary1
{
static public class Class1
{
static public string Something
{
get { return "something"; }
}
}
}
在VS2010 .NET 4.0中创建WPF窗口应用程序
编辑主窗口的XAML:
<Window x:Class="ahtranslator.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ClassLibrary1="clr-namespace:ClassLibrary1;assembly=ClassLibrary1"
Title="{Binding Source={x:Static ClassLibrary1:Class1}, Path=Something}"
Height="350" Width="525" Icon="/ahtranslator;component/Icon1.ico" WindowStyle="SingleBorderWindow" ShowInTaskbar="False" DataContext="{Binding}">
...
编译错误消息:
MainWindow.xaml(7,130):错误MC3029:'ClassLibrary1:Class1'成员无效,因为它没有合格的类型名称。
我也找到了这个话题My.Resources in WPF XAML?。
似乎一切都应该有效,但事实并非如此。
Microsoft未提供此错误消息的说明。只有帮助论坛http://social.msdn.microsoft.com/Forums/en/wpf/thread/4fe7d58d-785f-434c-bef3-31bd9e400691中的另一个主题,这也无济于事。
答案 0 :(得分:10)
在代码中,我认为它看起来像这样:
Binding titleBinding = new Binding("WindowName");
titleBinding.Source = Properties.Resources;
this.SetBinding(Window.Title, titleBinding);
只有在标题发生更改时才会有意义,并且会通知绑定这些更改(WindowName
必须是依赖属性或Resources
需要实现INotifyPropertyChanged
)
如果Properties
是命名空间(就像默认的VS生成的属性一样),您需要使用xmlns
&amp;使用x:Static
:
<Window
...
xmlns:prop="clr-namespace:App.Properties"
Title="{Binding Source={x:Static prop:Resources.WindowName}}">
另一个注意事项:如果使用Visual Studio的托管资源,则需要确保属性的访问修饰符为public
,默认为internal
,这将引发异常,因为绑定仅起作用对于公共财产。
答案 1 :(得分:1)
删除它:
... ;assembly=ClassLibrary1"
答案 2 :(得分:0)
我实际上在应用程序顶部定义的静态资源中有Title,我将Title和其他任何我想要的东西绑定
<s:String x:Key="ApplicationName">My Application</s:String>
答案 3 :(得分:0)
您是否尝试将资源的访问修饰符从内部更改为公用?
我现在遇到了一些问题。
/// <summary>
/// Looks up a localized string similar to Has been impossible to load the configuration information.
/// </summary>
internal static string ERROR_NoConfigurationLoaded {
get {
return ResourceManager.GetString("ERROR_NoConfigurationLoaded", resourceCulture);
}
}
到
/// <summary>
/// Looks up a localized string similar to Has been impossible to load the configuration information.
/// </summary>
public static string ERROR_NoConfigurationLoaded {
get {
return ResourceManager.GetString("ERROR_NoConfigurationLoaded", resourceCulture);
}
}