Средство выбора цвета Drop-Down

Платформа ленты Windows предоставляет специализированный Drop-Down элемент управления "Выбор цвета", который предоставляет различные параметры цвета с помощью кнопки разделения и настраиваемого раскрывающегося селектора цветов.

Введение

Эмулируя внешний вид и функциональные возможности средства выбора цветов Microsoft Office, платформа ленты может использовать преимущества согласованности и знакомство с различными приложениями, а также способствовать их повышению.

разметку

Как и все элементы управления ленты, средство выбора цвета Drop-Down легко реализуется и настраивается с помощью разметки. Платформа предоставляет ряд атрибутов элементов для средства выбора цвета Drop-Down для предоставления различных уровней функциональности. В следующей таблице перечислены Drop-Down атрибуты средства выбора цвета.

attribute Описание
ColorTemplate Шаблоны макетов, указывающие тип Drop-Down палитры.
Существует три шаблона, каждый из которых задает макет элемента управления и значения по умолчанию для связанных атрибутов и ключей свойств.
  • ThemeColors
  • StandardColors
  • HighlightColors
ChipSize Размер каждой цветовой микросхемы (или образца).
  • Small
  • Medium
  • Large
Столбцы Количество столбцов цветной микросхемы (или образца).
CommandName Имя связанного объявления command.
IsAutomaticColorButtonVisible Отображает (или скрывает) кнопку Автоматически .
Допустимо, только если ColorTemplate имеет значение ThemeColors или StandardColors.
IsNoColorButtonVisible Отображает (или скрывает) кнопку Без цвета .
Допустимо для всех значений ColorTemplate .
RecentColorGridRows Количество строк цветовой микросхемы (или образца) в области Последние цвета .
Допустимо, только если ColorTemplate имеет значение ThemeColors.
StandardColorGridRows Количество строк цветовой микросхемы (или образца) в области Стандартные цвета .
ThemeColorGridRows Количество строк цветовой фишки (или образца) в области Цвета темы .
Допустимо, только если ColorTemplate имеет значение ThemeColors.

На следующих снимках экрана показаны макеты по умолчанию Drop-Down палитры для трех шаблонов цветов.

     
ThemeColorsСнимок экрана:[newline] с элементом dropdowncolorpicker с атрибутом colortemplate, равным themecolors.[новая строка] standardcolorsСнимок экрана:[newline] с элементом dropdowncolorpicker с атрибутом colortemplate, равным standardcolors.[новая строка] highlightcolorsСнимок экрана:[newline] с элементом dropdowncolorpicker с атрибутом colortemplate, равным highlightcolors.

Базовая разметка, необходимая для каждого типа Drop-Down палитры, показана в следующих примерах:

Примечание

Выбор цвета Drop-Down является допустимым элементом управления Кнопка в шаблоне SizeDefinition .

<!-- DropDownColorPickers -->
<Command Name="cmdDropDownColorPickerGroup"
         Symbol="cmdDropDownColorPickerGroup"
         Comment="DropDownColorPicker Group"
         Id="55000"/>
<Command Name="cmdDropDownColorPickerThemeColors"
         Symbol="cmdDropDownColorPickerThemeColors"
         Comment="DropDownColorPicker ThemeColors"
         Id="55010"
         LabelTitle="ThemeColors"
         LabelDescription="ThemeColors\ndescription."/>
<Command Name="cmdDropDownColorPickerStandardColors"
         Symbol="cmdDropDownColorPickerStandardColors"
         Comment="DropDownColorPicker StandardColors"
         Id="55011"
         LabelTitle="StandardColors"/>
<Command Name="cmdDropDownColorPickerHighlightColors"
         Symbol="cmdDropDownColorPickerHighlightColors"
         Comment="DropDownColorPicker HighlightColors"
         Id="55012"
         LabelTitle="HighlightColors"/>

<Group CommandName=&quot;cmdDropDownColorPickerGroup&quot;
       SizeDefinition=&quot;ThreeButtons&quot;>
  <DropDownColorPicker
    CommandName=&quot;cmdDropDownColorPickerThemeColors&quot;
    ColorTemplate=&quot;ThemeColors&quot;/>
  <DropDownColorPicker
    CommandName=&quot;cmdDropDownColorPickerStandardColors&quot;
    ColorTemplate=&quot;StandardColors&quot;/>
  <DropDownColorPicker
    CommandName=&quot;cmdDropDownColorPickerHighlightColors&quot;
    ColorTemplate=&quot;HighlightColors&quot;
    StandardColorGridRows=&quot;1&quot;/>
</Group>

Код

Как специализированный элемент управления, поддерживающий настройку, любая реализация Drop-Down Color Picker, использующее эти возможности, требует специального кода приложения для управления свойствами и обработки любых команд, выдаваемых элементом управления .

Свойства

Платформа ленты определяет коллекцию ключей свойств для элемента управления Drop-Down Color Picker.

Как правило, свойство выбора цвета Drop-Down обновляется в пользовательском интерфейсе ленты путем аннулирования команды, связанной с элементом управления, с помощью вызова метода IUIFramework::InvalidateUICommand . Событие недействительности обрабатывается и свойство обновляется с помощью метода обратного вызова IUICommandHandler::UpdateProperty .

Метод обратного вызова IUICommandHandler::UpdateProperty не выполняется, и приложение запросит обновленное значение свойства, пока свойство не потребуется платформе. Например, при активации вкладки и отображении элемента управления в пользовательском интерфейсе ленты или при отображении подсказки.

Примечание

В некоторых случаях свойство можно получить с помощью метода IUIFramework::GetUICommandProperty и задать с помощью метода IUIFramework::SetUICommandProperty .

В следующей таблице перечислены ключи свойств, связанные с элементом управления Drop-Down Color Picker.

Ключ свойства Описание Примечания
UI_PKEY_AutomaticColorLabel Определяет метку для кнопки "Автоматический цвет".
Допустимо только в том случае , если ColorTemplate имеет значение ThemeColors или StandardColors.
Поддерживает IUIFramework::GetUICommandProperty и IUIFramework::SetUICommandProperty.
UI_PKEY_Color Определяет выбранное значение цвета в виде COLORREF.
Допустимо только в том случае, если UI_PKEY_ColorType имеет значение UI_SWATCHCOLORTYPE_RGB.
Поддерживает IUIFramework::GetUICommandProperty и IUIFramework::SetUICommandProperty.
UI_PKEY_ColorType Определяет выбранный тип цвета.
Поддерживает IUIFramework::GetUICommandProperty и IUIFramework::SetUICommandProperty.
UI_PKEY_Enabled Определяет возможность реагирования элемента управления на взаимодействие с пользователем.
Поддерживает IUIFramework::GetUICommandProperty и IUIFramework::SetUICommandProperty.
UI_PKEY_Keytip Может быть обновлено только через недействительность.
UI_PKEY_Label Определяет строку символов для метки элемента управления.
Может быть обновлено только через недействительность.
UI_PKEY_LargeHighContrastImage Определяет большое высококонтрастное изображение, отображаемое для элемента управления .
Может быть обновлено только через недействительность.
Дополнительные сведения о форматах изображений см. в разделе Указание ресурсов изображений ленты.
UI_PKEY_LargeImage Определяет большое изображение, отображаемое для элемента управления.
Может быть обновлено только через недействительность.
Дополнительные сведения о форматах изображений см. в разделе Указание ресурсов изображений ленты.
UI_PKEY_MoreColorsLabel Определяет метку для кнопки Дополнительные цвета.
Допустимо только в том случае , если ColorTemplate имеет значение ThemeColors или StandardColors.
Поддерживает IUIFramework::GetUICommandProperty и IUIFramework::SetUICommandProperty.
UI_PKEY_NoColorLabel Определяет метку для кнопки Без цвета .
Допустимо для всех значений ColorTemplate .
Поддерживает IUIFramework::GetUICommandProperty и IUIFramework::SetUICommandProperty.
UI_PKEY_RecentColorsCategoryLabel Определяет метку для категории Последние цвета .
Допустимо только в том случае , если ColorTemplate имеет значение ThemeColors. Это единственный шаблон, содержащий помеченные категории.
Поддерживает IUIFramework::GetUICommandProperty и IUIFramework::SetUICommandProperty.
UI_PKEY_SmallHighContrastImage Определяет небольшое изображение с высокой контрастностью, отображаемое для элемента управления .
Может быть обновлено только через недействительность.
Дополнительные сведения о форматах изображений см. в разделе Указание ресурсов изображений ленты.
UI_PKEY_SmallImage Определяет небольшое изображение, отображаемое для элемента управления .
Может быть обновлено только через недействительность.
Дополнительные сведения о форматах изображений см. в разделе Указание ресурсов изображений ленты.
UI_PKEY_StandardColors Определяет массив значений COLORREF для образцов Drop-Down палитры.
Каждая Drop-Down ColorTemplate палитры содержит сетку StandardColors .
Примечание: Отображаются значения COLORREF из исходного столбца StandardColorGridRows x массива. Если массив определяет меньше цветов, чем количество образцов, объявленных StandardColors в разметке, для отсутствующих чипов отображаются пустые пробелы.
Поддерживает IUIFramework::GetUICommandProperty и IUIFramework::SetUICommandProperty.
UI_PKEY_StandardColorsCategoryLabel Определяет метку для категории Стандартные цвета .
Допустимо только в том случае , если ColorTemplate имеет значение ThemeColors. Это единственный шаблон, содержащий помеченные категории.
Поддерживает IUIFramework::GetUICommandProperty и IUIFramework::SetUICommandProperty.
UI_PKEY_StandardColorsTooltips Определяет массив строк с подсказками цветовой палитры для сетки StandardColors .
Каждая Drop-Down ColorTemplate палитры содержит сетку StandardColors .
Примечание: Используются только подсказки, необходимые для маркировки цветовых образцов, отображаемых в сетке StandardColors . Если указано меньше меток, чем количество образцов в сетке StandardColors , для остальных образцов предоставляется значение по умолчанию.
Поддерживает IUIFramework::GetUICommandProperty и IUIFramework::SetUICommandProperty.
UI_PKEY_ThemeColors Определяет массив значений COLORREF для образцов Drop-Down палитры.
Допустимо только в том случае , если ColorTemplate имеет значение ThemeColors.
Примечание: Отображаются значения COLORREF из исходного столбца ThemeColorGridRows x массива. Если массив определяет меньше цветов, чем количество образцов, объявленных ThemeColors в разметке, для отсутствующих чипов отображаются пустые пробелы.
Поддерживает IUIFramework::GetUICommandProperty и IUIFramework::SetUICommandProperty.
UI_PKEY_ThemeColorsTooltips Определяет массив строк с подсказками цветовой палитры для сетки ThemeColors .
Допустимо только в том случае , если ColorTemplate имеет значение ThemeColors.
Примечание: Используются только подсказки, необходимые для маркировки цветовых образцов, отображаемых в сетке ThemeColors . Если указано меньше меток, чем количество образцов в сетке ThemeColors , для остальных образцов предоставляется значение по умолчанию.
Поддерживает IUIFramework::GetUICommandProperty и IUIFramework::SetUICommandProperty.
UI_PKEY_ThemeColorsCategoryLabel Определяет метку для категории Цвета темы .
Допустимо только в том случае , если ColorTemplate имеет значение ThemeColors. Это единственный шаблон, содержащий помеченные категории.
Поддерживает IUIFramework::GetUICommandProperty и IUIFramework::SetUICommandProperty.
UI_PKEY_TooltipDescription Определяет строку символов для описания подсказки, связанной с UI_PKEY_TooltipTitle.
Может быть обновлено только через недействительность.
UI_PKEY_TooltipTitle Определяет строку символов для подсказки команды.
Может быть обновлено только через недействительность.

Обработчики команд

Метод IUICommandHandler::UpdateProperty используется для настройки Drop-Down палитры с помощью перечисленных выше ключей свойств. В следующем примере показано, как задать цветовые образцы Drop-Down палитры на основе предпочтений пользовательского стиля или настраиваемой сетки образцов, объявленной в разметке.

STDMETHODIMP DropDownColorPickerHandler::UpdateProperty(
              UINT nCmdID,
              __in REFPROPERTYKEY key,
              __in_opt const PROPVARIANT* ppropvarCurrentValue,
              __out PROPVARIANT* ppropvarNewValue)
{
  HRESULT hr = E_NOTIMPL;
  if (key == UI_PKEY_ThemeColors)
  {
    COLORREF rThemeColors[TOT_THEME_COLORS];
    for (LONG i = 0; i < ARRAYSIZE(rThemeColors); i++)
    {
      // any COLORREF
      rThemeColors[i] = RGB(0, 255, 0); 
    }
    hr = InitPropVariantFromUInt32Vector(
           &rThemeColors, ARRAYSIZE(rThemeColors), ppropvarNewValue);
  }

  else if (key == UI_PKEY_StandardColors)
  {
    ULONG rStandardColors[TOT_STANDARD_COLORS];
    for (LONG i = 0; i < ARRAYSIZE(rStandardColors); i++)
    {
      // any COLORREF
      rStandardColors[i] = RGB(255, 0, 0); 
    }
    hr = InitPropVariantFromUInt32Vector(
           &rStandardColors, ARRAYSIZE(rStandardColors),ppropvarNewValue);
  }

  else if (key == UI_PKEY_ThemeColorsTooltips)
  {
    BSTR rThemeTooltips[TOT_THEME_COLORS];
    for (LONG i = 0; i < ARRAYSIZE(rThemeTooltips); i++)
    {
      // any constant character string
      rThemeTooltips[i] = L"Green"; 
    }
    hr = InitPropVariantFromStringVector((PCWSTR *)&rThemeTooltips, 50, ppropvarNewValue);
  }
  else if (key == UI_PKEY_StandardColorsTooltips)
  {
    static BSTR rStandardTooltips[TOT_STANDARD_COLORS];
    for (LONG i = 0; i < ARRAYSize(rStandardTooltips); i++)
    {
      // any constant character string
      rStandardTooltips[i] = L"Red"; 
    }
    hr = InitPropVariantFromStringVector(
           (PCWSTR *)&rStandardTooltips, 20, ppropvarNewValue);
  }
  return hr;
}

В следующем примере показана реализация метода IUICommandHandler::Execute , который предоставляет Drop-Down цвета палитры выбора цвета для приложения ленты.

STDMETHODIMP DropDownColorPickerHandler::Execute(
                 UINT nCmdID,
                 UI_EXECUTIONVERB verb,
                 __in_opt const PROPERTYKEY* key,
                 __in_opt const PROPVARIANT* ppropvarValue,
                 __in_opt IUISimplePropertySet* pCommandExecutionProperties)
{
  HRESULT hr = E_NOTIMPL;
  if (*key == UI_PKEY_ColorType)
  {
    UI_SWATCHCOLORTYPE uType = 
      (UI_SWATCHCOLORTYPE)PropVariantToUInt32WithDefault(
        *ppropvarValue, 
        UI_SWATCHCOLORTYPE_NOCOLOR);

    COLORREF color;
    switch(uType)
    {
      case UI_SWATCHCOLORTYPE_RGB:
        PROPVARIANT var;
        pCommandExecutionProperties->GetValue(UI_PKEY_Color, &var);
        color = PropVariantToUInt32WithDefault(var, 0);
        break;
      case UI_SWATCHCOLORTYPE_AUTOMATIC:
        color = COLOR_WINDOWTEXT;
        break;
      case UI_SWATCHCOLORTYPE_NOCOLOR:
        color = MSONoFill;
        break;
    }

    // do with your color what you will...
    gInternalColor = color;
    hr = S_OK;
  }
  return hr;
}

Библиотека элементов управления Windows Ribbon Framework

Элемент разметки DropDownColorPicker

Свойства палитры

Настройка ленты с помощью определений размера и политик масштабирования

Пример DropDownColorPicker