我正在使用Visual Studio 2010中的WPF应用程序。
将应用程序窗口加载到设计器中时,尝试检索连接字符串或应用程序设置始终返回null。例如,如果我的应用程序设置名为“foo”且值为“bar”,则在设计器中,ConnectionManager.AppSettings["foo"]
将返回null,而在运行时,它将返回“bar”。这让我有些惊愕,因为我的窗口现在正在设计师中抛出异常。
这是Visual Studio中的已知错误(或“功能”)吗?我无法在其他地方找到它。
如果您之前遇到过这种情况,是否有可用的常用解决方法?
按照菲尔的要求编辑:可以通过在窗口中放置标签来轻松复制,例如:
<Label Content="{Binding TheText}" HorizontalAlignment="Left" />
在viewmodel中,将TheText元素设置为应用程序设置“foo”的值:
TheText = ConfigurationManager.AppSettings["foo"];
app.config包含以下appSettings部分:
<appSettings>
<add key="foo" value="bar"/>
</appSettings>
编辑:我已将Phil的解决方案标记为正确,因为似乎使用设置API是解决此问题的唯一方法。可悲的是,在所有情况下,这都不是一个可行的解决方法。我在MS Connect上提出了一个问题:https://connect.microsoft.com/VisualStudio/feedback/details/738316/system-configuration-configurationmanager-does-not-work-in-wpf-designer
答案 0 :(得分:1)
我尝试过与你的例子类似的东西没有问题:
1)在项目属性“设置”选项卡中添加了字符串设置
2)添加带标签的控件
<Label Content="{Binding TheText}" HorizontalAlignment="Left" />
3)添加了视图模型
public class ViewModel
{
public string TheText{ get{ return Settings.Default.TheSetting; } }
}
4)数据上下文
<UserControl.DataContext>
<ViewModel/>
</UserControl.DataContext>
主要区别在于我通过Settings.Default使用键入的应用程序设置。
如果您的app.config包含此样式的设置:
<applicationSettings>
<MyTestApp.Properties.Settings>
<setting name="TheSetting" serializeAs="String">
<value>Test</value>
</setting>
</MyTestApp.Properties.Settings>
</applicationSettings>
您需要使用Settings.Default.xxx