2014-01-07 5 views
0

Я ищу пример настраиваемой кнопки WPF. Идеально подходит для любимой конфигурации Blend/VS2013, т. Е. Тестового решения VS2013, которое включает проект кнопки, который можно редактировать в Blend для VS2013. Кнопка должна иметь внешний вид, что делает его ясно, что состояние он находится, т.е.Любые примеры богатого визуального поведения WPF-кнопки?

  • Normal = по умолчанию
  • MouseOver = внутреннее свечение
  • прессованная = меньший размер/меньше тень
  • ToggledOn = внешнее свечение
  • Disabled = неактивна

Учитывая такой пример я мог бы просто настроить визуальный появление состояний с использованием Blend.

И на стороне приложения я хочу просто создать экземпляр кнопки, связать стиль и установить свойства BackgroundColor, изображения/значка, текстовой метки, ширины, высоты.

Похоже, что использование стиля ControlTemplate является рекомендуемым способом, а не подклассификацией, см. MSDN.

Три ключевые проблемы кажутся:

  • как настроить структуру проекта VS2013/смешивания использовать как взаимозаменяемые на одном наборе исходных файлов
  • как вычислить относительные размеры в ControlTemplate, т.е. что такое синтаксис для Width = Button.Width x 1.1, чтобы установить интенсивность свечения относительно фактического размера кнопки, которая не находится в шаблоне, но должна быть определена в дизайне пользовательского интерфейса клиентского приложения.
  • как вычислить относительные цвета из основного цвета кнопки, т.е. то, что синтаксис WPF XAML для GradientStop Color = Button.BackgroundColor х 80% + белый х 20%

Это должно быть очень общая потребность, но Google не помог найти что-либо подобное выше.

Любая помощь по любому из трех ключевых вопросов будет принята с благодарностью.

ответ

0

Ваши требования не требуют определения новой ControlTemplate и может быть достигнуто с помощью Style с Triggers, например:

<Grid> 
    <Grid.Resources> 
     <Style TargetType="Button"> 
      <Setter Property="RenderTransformOrigin" Value="0.5,0.5"/> 
      <Style.Triggers> 
       <Trigger Property="IsPressed" Value="True"> 
        <Setter Property="RenderTransform"> 
         <Setter.Value> 
          <ScaleTransform ScaleX="0.75" ScaleY="0.75"/> 
         </Setter.Value> 
        </Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Grid.Resources> 
    <Button Content="Click Me!" /> 
</Grid> 
  • Style могут быть доступны в любой точке приложения, если они определены в вашем App.xaml Ресурсы и с учетом x: Ключ
  • Использование значений ScaleTransform ScaleX и ScaleY относительных значений.
  • Вам понадобится ваш собственный IValueConverter, а затем привяжите целевой цвет к исходному цвету с помощью вашего конвертера.