2

我创建了一个与 WPF 用户控件库关联的配置文件。在调试器中或单独运行应用程序时,使用以下代码可以很好地加载配置,该代码在库的上下文中运行:

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = "MapControl.dll.config";

Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);

if (config != null)
{
    _Instance = (MapControlConfiguration)config.GetSection("MapControlConfiguration");
}

但是,当我尝试在 Visual Studio 2010 的 XAML 设计器中查看控件时,不会加载配置文件。使用 Process Monitor,我确定它正在尝试在以下位置加载配置文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MapControl.dll.config. 这是不幸的,因为那肯定不是包含配置文件的目录。ConfigurationManager.OpenMappedExeConfiguration期望配置文件与可执行文件相关,但在 XAML 设计器的上下文中,本身没有可执行文件。有没有办法指定配置文件的位置,以便在 XAML 设计器中查看控件时加载它?

4

1 回答 1

0

您可以使用该System.ComponentModel.DesignerProperties.GetIsInDesignMode方法来判断您是否处于设计模式。像这样:

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
{
    fileMap.ExeConfigFilename = "F:\ull\Path\To\Your\Debug\MapControl.dll.config";
}
else
{
    fileMap.ExeConfigFilename = "MapControl.dll.config";
}

Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);

if (config != null)
{
    _Instance = (MapControlConfiguration)config.GetSection("MapControlConfiguration");
}
于 2011-11-02T11:16:01.580 回答