Опишу проблему так Я создал настраиваемый элемент управления, и пользователи могут использовать настраиваемый элемент управления таким образом.
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source = "/customControl;component/ThemeResources/Light.xaml"/>
<ResourceDictionary Source = "/customControl;component/ThemeResources.xaml"/>
</ResourceDictionary.MergedDictionaries>
С этим методом проблем нет, и все ресурсы могут быть идентифицированы с помощью VS IntelliSense.
Теперь, чтобы упростить использование пользовательского элемента управления, я использую следующий класс:
public class Theme : ResourceDictionary
{
public Theme()
{
if (DesignerHelper.IsInDesignMode)
{
MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri("pack://application:,,,/customControl;component/ThemeResources/Light.xaml")
});
MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri("pack://application:,,,/customControl;component/ThemeResources.xaml")
});
}
else
{
UpdateResource();
}
}
private Uri _source;
public new Uri Source
{
get => DesignerHelper.IsInDesignMode ? null : _source;
set => _source = value;
}
public string Name { get; set; }
private void UpdateResource()
{
if (DesignerHelper.IsInDesignMode) return;
MergedDictionaries.Clear();
MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri("pack://application:,,,/customControl;component/ThemeResources.xaml")
});
MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri("pack://application:,,,/customControl.Controls;component/ThemeResources/Light.xaml")
});
}
}
Теперь таким образом мы можем использовать пользовательский элемент управления:
<ResourceDictionary.MergedDictionaries>
<ui:Theme/>
</ResourceDictionary.MergedDictionaries>
Теперь проблема в том, что ни один из ресурсов не определяется IntelliSense. Но если мы сами напишем имя стиля, мы сможем использовать ресурсы.
Почему возникает эта проблема? Как решить эту проблему?
XAML intellisense должен работать без запуска кода и/или когда решение не построено. Таким образом, он не знает, что создание темы заполнит его pack://application:,/customControl;component/Themes/Generic.xaml
.