#wpf #silverlight #windows-phone-7 #wpf-controls
#wpf #silverlight #windows-phone-7 #wpf-элементы управления
Вопрос:
Я работаю над приложением, в котором я хочу, чтобы цвет нескольких границ менялся в зависимости от выбора темы пользователем. Границы частично размещаются в xaml, но также динамически генерируются по всему приложению в зависимости от выбора пользователя. Я также использую несколько элементов управления LoopingSelector (из Silverlight toolkit), которые, в свою очередь, также генерируют границы.
Итак, мне было интересно, как мне следует подойти к этой проблеме. Сначала я попытался применить стиль к границам, а затем изменить стиль в зависимости от выбора темы, но, по-видимому, стили доступны только для чтения во время выполнения. Я также подумал, что мог бы выполнить итерацию и изменить цвет границ, но, похоже, LoopingSelector не раскрывает это свойство своих границ или, на самом деле, вообще не раскрывает элементы управления.
Итак, я предполагаю, что мне следует каким-то образом использовать привязку, но поскольку я все еще новичок в Silverlight, я не совсем уверен, как это сделать.
Заранее благодарю.
Ответ №1:
Если у вас есть именованный ресурс, скажем, CustomBorderBrush, который вы используете в вашем XAML для частей, которые есть в XAML, тогда вы можете получить доступ к этой кисти из ресурсов приложения:
Border newBorder = new Border();
newBorder.BorderBrush = (Brush)Application.Current.Resources["CustomBorderBrush"];
Если у вас дополнительно есть проблема с LoopingSelector
, то это отдельная проблема 🙂 Похоже, вам нужно применить свой собственный стиль к LoopingSelector
, чтобы вы могли указать нужное вам значение кисти.
Комментарии:
1. Да, но если я попытаюсь изменить этот ресурс, компилятор выдаст не реализованное исключение.
2. А, я понимаю, что ты пытаешься сделать сейчас. Вы пытаетесь предоставить заранее определенный набор тем или пытаетесь позволить пользователю самостоятельно изменять части темы?
3. У меня есть четыре предустановленные темы, из которых пользователь может выбирать. В любом случае, мне удалось заставить все это работать, определив четыре разных DataTemplate для каждого LoopingSelector и установив для них ItemTemplate в code-behind в зависимости от выбранной темы, при этом вручную изменив цвет всего остального. И хотя это функциональное, на ощупь довольно «уродливое» решение, поэтому, если вы знаете другой способ, пожалуйста, дайте мне знать 🙂