Windows Phone, динамический стиль

#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 в зависимости от выбранной темы, при этом вручную изменив цвет всего остального. И хотя это функциональное, на ощупь довольно «уродливое» решение, поэтому, если вы знаете другой способ, пожалуйста, дайте мне знать 🙂