Как добавить ResourceDictionary программно?

Я новичок в С# WPF и могу полагаться только на Интернет, чтобы продолжить свой проект. В настоящее время у меня есть проблема с добавлением имени ResourceDictionary ThumbStyle.xaml, которое содержит несколько стилей, к которым необходимо получить доступ в файле класса с именем LineAdorner.cs.

Код из ThumbStyle.xaml:

<Style x:Key = "LineMoveThumbStyle" TargetType = "{x:Type Thumb}">
    <Setter Property = "Cursor" Value = "SizeAll"></Setter>
    <Setter Property = "Width" Value = "7"></Setter>
    <Setter Property = "Height" Value = "7"></Setter>
</Style>

<Style x:Key = "LineResizeThumbStyle" TargetType = "{x:Type Thumb}">
    <Setter Property = "Width" Value = "7"></Setter>
    <Setter Property = "Height" Value = "7"></Setter>
    <Setter Property = "Cursor" Value = "Hand"></Setter>
</Style> 

Код из LineAdorner.cs:

this._moveThumb = new MoveThumb();
this._moveThumb.Style = (Style)Application.Current.FindResource("LineMoveThumbStyle");
this._visuals.Add(this._moveThumb);

this._startThumb = new LineStartPointThumb(_adornedLine);
this._startThumb.Style = (Style)Application.Current.FindResource("LineResizeThumbStyle");
this._visuals.Add(this._startThumb);

this._endThumb = new LineEndPointThumb(_adornedLine);
this._endThumb.Style = (Style)Application.Current.FindResource("LineResizeThumbStyle");
this._visuals.Add(this._endThumb);

Как видно из вышеизложенного, я попытался использовать метод FindResource для извлечения стиля из Thumbsytle.xaml в LineAdorner.cs. Тем не менее, система выдает мне ошибку:

System.Windows.ResourceReferenceKeyNotFoundException occurred.
Message='LineMoveThumbStyle' resource not found.

Есть ли какие-то шаги, которые я пропустил? Надеюсь, что кто-нибудь может помочь мне с этой проблемой. Спасибо большое.

В какой словарь ресурсов добавлен ваш LineResizeThumbStyle? Можете найти ответ здесь: stackoverflow.com/questions/618648/…

peeyush singh 08.03.2019 04:05

Я предполагаю, что ThumbStyle.xaml не объединен с доступными ресурсами LineAdorner.cs. Вы можете добавить его примерно так: ResourceDictionary r = new ResourceDictionary(); r.Source = new Uri("Uri/To/your/xaml"); Application.Current.Resources.MergedDictionaries.Add(r);

LittleBit 08.03.2019 08:12

Почему вы хотите добавить словарь ресурсов программно, а не ссылаться на него в ресурсах app.xaml?

grek40 08.03.2019 08:26

Глупый я .. Спасибо всем за вашу любезную помощь .. в конце концов я заметил, что не добавил их в ресурсы app.xaml .. Привет @grek40 за напоминание .. спасибо, приятель

Ryan Gan 09.03.2019 15:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
1 363
2

Ответы 2

Я не совсем понимаю, что вы пытаетесь сделать, но поможет ли это вам? Сначала поместите свой ресурс в папку с именем Resources, а затем:

            var rsrc = "Resources/ThumbStyle.xaml";
            var currentRsrc = new Uri(rsrc, UriKind.RelativeOrAbsolute);
            Application.Current.Resources.MergedDictionaries[0] = new ResourceDictionary() { Source = currentRsrc };

Удачи!

Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri("/DLLName;component/subFolder/dictionary.xaml", UriKind.RelativeOrAbsolute)
});

Другие вопросы по теме