2012-02-02 2 views
7

Я хотел бы изменить форму кнопки WPF из круглого прямоугольника по умолчанию в другую форму (скажем, стрелку), но я хочу сохранить остальную часть стиля - цвет заливки, состояние наведения и т. д. Я хочу, чтобы кнопка имела те же стили, что и все другие обычные кнопки (что, я считаю, зависит от версии Windows, цвета системных тем и т. д., так что я не могу воссоздать стиль кнопки с нуля и жесткий код - правильные цвета).Изменение формы кнопки WPF без изменения других стилей

Есть ли способ сделать это?

ответ

0

Сделайте копию default Button Template и просто измените панель по умолчанию на свою собственную форму.

В случае кнопки, похоже, вам нужно заменить Border чем-то вроде Path, определяющим стрелку.

Поскольку у Path нет содержимого, вам, вероятно, придется поместить как форму, так и содержимое на другую панель, которая позволяет перекрывать объекты, такие как сетка.

Так что ваш конечный результат будет выглядеть примерно так

<Grid> 
    <Path /> 
    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" /> 
</Grid> 

вместо стандартного

<Button> 
    <ContentPresenter /> 
</Button> 
+1

Как получить шаблон шаблона по умолчанию? В статье MSDN, на которую вы ссылаетесь, есть шаблон * sample *, но он не является стандартным. –

+1

@HenryJackson Я думаю, что это по умолчанию, кроме цветов. По умолчанию он вытягивает цвета из 'SystemColors'. Другой вариант - сделать копию шаблона в Expression Blend. – Rachel

1

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

Вот хороший ресурс для создания пользовательской кнопки, если у вас есть Смешать:
http://msdn.microsoft.com/en-us/library/bb613598.aspx

+0

Можете ли вы дать мне пример того, как переопределить только границу? В статье MSDN показано, как создать тему с нуля в Blend, что не совсем то, что я хочу сделать. –

0

Если вы хотите, чтобы наследовать системы по умолчанию цвета/стили для Button вы можете использовать TemplateBinding сек внутри кнопки Template. Например, если вы хотите создать кнопку заказной формы, которые имели один и тот же цвет фона, как системный, вы можете использовать ниже:

<Button> 
    <Button.Template> 
     <ControlTemplate TargetType="Button"> 
      <Grid> 
       <!-- circle to have inherited colour --> 
       <Ellipse Fill="{TemplateBinding Background}" Height="50" Width="50" /> 
       <ContentPresenter /> 
      </Grid> 
     </ControlTemplate> 
    </Button.Template> 
</Button> 

Ellipse будет наследовать цвет фона от Button, однако установлено.

+0

Это делает правильный цвет фона, но в противном случае это просто круг. Нет границ, нет наведения или состояний щелчка, нет градиентного блеска над содержимым. Я пытаюсь не делать целую кнопку с нуля. –

Смежные вопросы