Почему "ресурс не может быть разрешен" с помощью ComponentResourceKey?
Я пытаюсь использовать пользовательские ресурсы, используя ComponentResourceKey
, но это не работает, и я получаю это предупреждение:
Warning 12 The resource "{ComponentResourceKey ResourceId=SadTileBrush, TypeInTargetAssembly={x:Type res:CustomResources}}" could not be resolved.
Здесь ResourceLibrary/Themes/generic.xaml
:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ResourceLibrary">
<ImageBrush x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:CustomResources},
ResourceId=MyBrush}"
ImageSource="ResourceLibrary;component/../../myImage.jpg">
</ImageBrush>
</ResourceDictionary>
И ResourceLibrary/CustomResources.cs
:
namespace ResourceLibrary{
public class CustomResources{}
}
Использование заключается в следующем (в SomeOtherProject/MyWindow.xaml
):
<Button Background="{DynamicResource {ComponentResourceKey
TypeInTargetAssembly={x:Type res:CustomResources},
ResourceId=MyBrush}}"> Some text </Button>
Почему "ресурс не может быть разрешен"?
Обратите внимание, что мне известен вопрос SO " Как заставить ComponentResourceKey работать?", Но проблема в этом случае заключалась в коде, которого мне все равно не хватает...
1 ответ
При использовании ComponentResourceKey убедитесь, что префикс xmlns отличается от файла класса.dll
((DLL = 'Local' - этот класс = 'res')
<Button Background="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type res:CustomResources}, ResourceId=SadTileBrush}}" Padding="5" Margin="5" FontWeight="Bold"
FontSize="14" Content="A Resource From ReusableResourceLibrary" />
Я создал этот класс словаря для встраивания / объединения моего словаря.dll
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/ReusableResourceLibrary;component/Dictionary1.xaml" />
</ResourceDictionary.MergedDictionaries>
<ImageBrush x:Key="DicTileBrush" TileMode="Tile" ViewportUnits="Absolute" Viewport="0 0 50 50" ImageSource="../Resources/Images/Smiley_Happy.png" Opacity="0.3" />
</ResourceDictionary>
и затем внутри моего окна /usercontrol я слил ресурсы window/usercontrol со словарем ресурсов, приведенным выше, и это сработало
надеюсь это поможет