Получение команды шаблонной кнопки для работы - PullRequest
0 голосов
/ 11 ноября 2009

Я использовал шаблон элемента управления для тривиального изменения внешнего вида кнопки. Теперь он выглядит по-другому, но не ведет себя как кнопка. На самом деле есть две проблемы:

  1. Команда кнопки никогда не выполняется
  2. После нажатия на кнопку она выглядит выделенной (то есть эллипс превращается в уродливый синий прямоугольник)

Вот общая идея:

<Button Command="{x:Static commands:...}"
        CommandParameter="{Binding}">
    <Button.Template>
        <ControlTemplate TargetType="Button">
            <Ellipse Fill="{Binding ...}"
                     .../>
        </ControlTemplate>
    </Button.Template>
</Button>

Ответы [ 3 ]

2 голосов
/ 11 ноября 2009
  1. Нет причин, чтобы это происходило. Я собрал тест, используя ApplicationCommands.Copy, и команда сработала очень хорошо. Возможно, ваш CommandBinding не работает должным образом.
  2. Я также не видел этого из-за копирования вашего образца XAML и просто установки Fill="Green". Вы можете попробовать установить FocusVisualStyle="{x:Null}" на Button.
1 голос
/ 11 ноября 2009

Проблема оказалась в том, что Fill был привязан к значению, которое может быть нулевым. Если кисть Fill пуста, а не прозрачна, тогда нечего щелкать, и команда не будет выполнена. Как упоминал Дрю, при сплошной заливке кнопка работает правильно.

Урок на вынос: если вы хотите скрыть свою форму, но при этом она реагирует на взаимодействие с пользователем, используйте прозрачную кисть, а не нулевую кисть.

0 голосов
/ 03 апреля 2014

У меня была похожая проблема с настраиваемой шаблонной кнопкой:

     <my:UniButton Command="{Binding MyCommand}"/>

Привязка не работала до добавления RelativeSource:

     <my:UniButton Command="{Binding MyCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=my:CustomPanel}}"/>

где CustomPanel - это элемент управления, где находится моя кнопка.

Withal У меня была простая кнопка на той же панели, но она работала нормально даже без RelativeSource.

...