У меня есть Главное окно с кнопками и кнопкой, открывающей следующее окно. В следующем окне есть большие пользовательские элементы управления, которые состоят из множества идентичных меньших пользовательских элементов управления. Теперь, когда выбрана радиокнопка, она отправляет свое имя в маленькие пользовательские элементы управления, где оно используется как имя библиотеки для каждого скина. (Шкуры меняют только параметры небольших пользовательских элементов управления.)Как установить имя скина перед инициализацией пользовательского элемента управления?
Теперь проблема заключается в том, что имя библиотеки достигает небольшого пользовательского элемента управления только после того, как оно было инициализировано, что слишком поздно, поскольку к тому времени значение имени строки уже считается нулевым, а скин не загружен.
Это код из небольшого пользовательского элемента управления:
public string name ="";
public bool SetSkin(string _Banananas)
{
name = _Banananas;
return true;
}
public SW1()
{
InitializeComponent();
Loaded += OnSkinChanged;
DataContext = this;
IsBlinking = false;
}
private void OnSkinChanged(object sender, RoutedEventArgs e)
{
mg.Resources.Clear();
mg.Resources.MergedDictionaries.Clear();
ResourceDictionary skin = Application.LoadComponent(new Uri("/TestingApp;component/Resources/Skins/" + name + ".xaml", UriKind.Relative)) as ResourceDictionary;
mg.Resources.MergedDictionaries.Add(skin);
e.Handled = true;
}
_Banananas является строка, я получаю от кнопки-радио.
Так какие идеи?
Спасибо за респоз, объект mg - это сетка в SW1, а SW1 - это небольшой пользовательский элемент управления, поэтому это не будет работать (Я попробовал), я попытался сделать это по-разному, но пока не нашел ничего полезного, я проверил вашу ссылку и теперь перебираю ее дальше, но дело в том, что я не использую mvvm, и это я думаю, слишком много сейчас, чтобы превратиться в него. Я нашел несколько страниц по динамическому скинированию, но ни один из них не имел бы аналогичных вложенных элементов управления. – Evil
Используете ли вы 'DynamicResource' в файлах XAML своих элементов управления пользователя? Если да, то вы можете динамически менять стили во время выполнения - я бы даже посоветовал вам сделать это на уровне приложения. Для достижения этой функциональности вам не обязательно следовать шаблону MVVM. – feO2x
Я использую динамический ресурс. И я бы сменил скины раньше на более высоком уровне, но все дело в том, что когда нажата кнопка открытия, окна inits и BW1 (большой пользовательский контроль) умножаются в соответствии с данными, заполненными SW1 соответственно, и все это происходит при одной инициализации после другого мгновенно. Поэтому я думаю, что мне нужен способ обновить SW1 или что-то сразу после того, как строка имени изменит его значение ... – Evil