Глобальный набор инструментов WPF для выбора стандартных цветов

#c# #wpf #binding #color-picker #xceed

#c# #wpf #привязка #средство выбора цвета #xceed

Вопрос:

Для проекта я использую набор инструментов Xceed WPF colorpicker, позволяющий пользователям выбирать цвет. Этот набор цветов используется на разных страницах и с нашими собственными пользовательскими цветами. Поэтому я хочу создать один глобальный стиль в Application.xaml , а затем использовать colorpicker на разных страницах, однако я не могу найти правильно работающий пример того, как создать глобальный стиль С помощью массива StandardColors других, создающих его в коде, и скопировать / вставить код на разные страницы.

Надеюсь, кто-нибудь сможет мне помочь с этим.

Способ, которым я заставил его работать сейчас, заключается в:

Xaml на каждой странице /usercontrol:

 <xctk:ColorPicker
    Name="ClrPcker_Background"
    Grid.Row="4"
    Grid.Column="1"
    Width="300"
    Margin="3"
    HorizontalAlignment="Left"
    SelectedColor="{Binding BackgroundColor, Mode=TwoWay, Converter={StaticResource BrushToColor}, UpdateSourceTrigger=PropertyChanged}"
    SelectedColorChanged="ClrPcker_Background_SelectedColorChanged"
    ShowRecentColors="True" />
  

Код за каждой страницей /usercontrol:

     CustomColorList.Add(New Xceed.Wpf.Toolkit.ColorItem(Color.FromRgb(32, 32, 32), "DarkBackground"))
    CustomColorList.Add(New Xceed.Wpf.Toolkit.ColorItem(Color.FromRgb(60, 60, 59), "DarkLightBackground"))
    CustomColorList.Add(New Xceed.Wpf.Toolkit.ColorItem(Color.FromRgb(87, 87, 86), "LightGrayBackground"))
    CustomColorList.Add(New Xceed.Wpf.Toolkit.ColorItem(Color.FromRgb(231, 76, 60), "RedLight"))
    CustomColorList.Add(New Xceed.Wpf.Toolkit.ColorItem(Color.FromRgb(39, 174, 96), "GreenLight"))
    CustomColorList.Add(New Xceed.Wpf.Toolkit.ColorItem(Color.FromRgb(52, 152, 219), "BlueLight"))
    CustomColorList.Add(New Xceed.Wpf.Toolkit.ColorItem(Color.FromRgb(243, 156, 18), "OrangeLight"))
    CustomColorList.Add(New Xceed.Wpf.Toolkit.ColorItem(Color.FromRgb(104, 34, 27), "RedDark"))
    CustomColorList.Add(New Xceed.Wpf.Toolkit.ColorItem(Color.FromRgb(25, 110, 61), "GreenDark"))
    CustomColorList.Add(New Xceed.Wpf.Toolkit.ColorItem(Color.FromRgb(22, 64, 92), "BlueDark"))
    CustomColorList.Add(New Xceed.Wpf.Toolkit.ColorItem(Color.FromRgb(116, 74, 9), "OrangeDark"))
  

В идеале я также могу использовать наши глобальные используемые цвета в качестве элементов цвета, которые также добавляются в Application.xaml

         <!--  Background colors  -->
        <Color x:Key="clrDarkBackground">#202020</Color>
        <Color x:Key="clrDarkLightBackground">#3C3C3B</Color>
        <Color x:Key="clrLightGrayBackground">#575756</Color>
        <SolidColorBrush x:Key="scbDarkBackground" Color="{StaticResource clrDarkBackground}" />
        <SolidColorBrush x:Key="scbDarkLightBackground" Color="{StaticResource clrDarkLightBackground}" />
        <SolidColorBrush x:Key="scbLightGrayBackground" Color="{StaticResource clrLightGrayBackground}" />

        <!--  Light Colors  -->
        <Color x:Key="clrRedLight">#E74C3C</Color>
        <Color x:Key="clrGreenLight">#27AE60</Color>
        <Color x:Key="clrBlueLight">#3498DB</Color>
        <Color x:Key="clrOrangeLight">#F39C12</Color>
        <SolidColorBrush x:Key="scbRedLight" Color="{StaticResource clrRedLight}" />
        <SolidColorBrush x:Key="scbGreenLight" Color="{StaticResource clrGreenLight}" />
        <SolidColorBrush x:Key="scbBlueLight" Color="{StaticResource clrBlueLight}" />
        <SolidColorBrush x:Key="scbOrangeLight" Color="{StaticResource clrOrangeLight}" />

        <!--  Dark Colors  -->
        <Color x:Key="clrRedDark">#68221B</Color>
        <Color x:Key="clrGreenDark">#196E3D</Color>
        <Color x:Key="clrBlueDark">#16405C</Color>
        <Color x:Key="clrOrangeDark">#744A09</Color>
        <SolidColorBrush x:Key="scbRedDark" Color="{StaticResource clrRedDark}" />
        <SolidColorBrush x:Key="scbGreenDark" Color="{StaticResource clrGreenDark}" />
        <SolidColorBrush x:Key="scbBlueDark" Color="{StaticResource clrBlueDark}" />
        <SolidColorBrush x:Key="scbOrangeDark" Color="{StaticResource clrOrangeDark}" />
  

Комментарии:

1. Что такое «CustomColorList»? Возможно, вы захотите рассмотреть возможность создания пользовательского элемента управления, который наследуется от ColorPicker .

2. Спасибо, в итоге был создан CustomControl, который наследует ColorPicker, теперь работает как шарм

Ответ №1:

Вам следует подумать о создании пользовательского элемента управления, который наследуется от ColorPicker вместо того, чтобы добавлять элементы в список каждого представления.

Затем вы можете, например, добавить цвета к элементу управления в его конструкторе.