powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / ButtonStyle
11 сообщений из 11, страница 1 из 1
ButtonStyle
    #38621031
ЧитательX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создал стиль для кнопки. Примерно такого вида:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
<Style x:Key="ButtonStyle1" TargetType="Button">
  ...
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type Button}">
        <Border x:Name="Border1" BorderThickness="1" CornerRadius="3" BorderBrush="White"
                Background="{TemplateBinding Background}">
          <ContentPresenter x:Name="ContentPresenter"
                            ContentTemplate="{TemplateBinding ContentTemplate}" 
                            Content="{TemplateBinding Content}" 
                            Focusable="False" 
                            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                            VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"                             
                            ContentStringFormat="{TemplateBinding ContentStringFormat}"
                            />
        </Border>				
        <ControlTemplate.Triggers>
          <Trigger Property="IsMouseOver" Value="True" SourceName="ContentPresenter">
	    ...
          </Trigger>
          ...
        </ControlTemplate.Triggers>

      </ControlTemplate>
    </Setter.Value>
  </Setter>
  ...
</Style>


Почти все неплохо. Но, есть одна неприятность - если текст контента не слишком большой (например кнопка "ОК"), то большая часть поверхности кнопки не реагирует на мышку. Только та часть кнопки, где расположен текст контента "узнает" мышку и реагирует на нее. Если ширина кнопки определяется не как Auto, а например растягивается как соседние кнопки (выравнивание кнопок), то большая часть кнопки "мертвая" (не реагирует на мышь).
Как побороть такую напасть?
...
Рейтинг: 0 / 0
ButtonStyle
    #38621045
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я не ошибаюсь, когда Border.Background == transparent, он не реагирует на события мыши.
...
Рейтинг: 0 / 0
ButtonStyle
    #38621091
ЧитательX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так ведь у меня не установлен: Border.Background == transparent
Мне как раз нужно чтобы вся кнопка реагировала на мышь. А сейчас реагирует только та часть, которая занята текстом. Остальная часть "мертвая". Я сначала не понял почему мне приходится много раз тыкать мышкой в кнопку "OK". В результате изучения вопроса выяснилось, что нужно попадать не просто в кнопку, а нужно в текст кнопки попасть. Это иногда напрягает.
...
Рейтинг: 0 / 0
ButtonStyle
    #38621104
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧитательXТак ведь у меня не установлен: Border.Background == transparentОно у тебя привязано к свойству Background кнопки, которое по дефолту Transparent.

Впрочем, можно попробовать упаковать весь шаблон в какую-нибудь панель, например, в Grid.
Код: xml
1.
2.
3.
4.
5.
6.
7.
<ControlTemplate>
    <Grid>
        <Border>
            <ContentPresenter/>
        </Border>
    </Grid>
</ControlTemplate>
...
Рейтинг: 0 / 0
ButtonStyle
    #38621185
ЧитательX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насчет Background кнопки мысль понял.

А вот паковать в грид:
Код: c#
1.
2.
3.
4.
5.
6.
7.
<ControlTemplate>
    <Grid>
        <Border>
            <ContentPresenter/>
        </Border>
    </Grid>
</ControlTemplate>


уже пробовал - не помогло.
...
Рейтинг: 0 / 0
ButtonStyle
    #38621223
ЧитательX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В триггере изменил SourceName:
Код: c#
1.
<Trigger Property="IsMouseOver" Value="True" SourceName="Border1">


И вся кнопка стала работать!
Все OK
...
Рейтинг: 0 / 0
ButtonStyle
    #38621224
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
ButtonStyle
    #38621229
ЧитательX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за участие.
...
Рейтинг: 0 / 0
ButtonStyle
    #38621233
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧитательXВ триггере изменил SourceName:
Код: c#
1.
<Trigger Property="IsMouseOver" Value="True" SourceName="Border1">


И вся кнопка стала работать!
Все OKСразу не обратил внимания, зачем там вообще SourceName? Чем не устраивает IsMouseOver самой кнопки?

Рекомендую использовать IsHitTestVisible, как пишут в указанной выше ссылке.
...
Рейтинг: 0 / 0
ButtonStyle
    #38621378
ЧитательX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. default-поведение IsMouseOver самой кнопки выглядит не очень хорошо.
При наезде мышки на кнопку, последняя становится просто белой. Поэтому и пришлось лепить свой стиль на IsMouseOver на IsEnabled.
2. Я попробовал поманипулировать свойством IsHitTestVisible. Оно просто отключает реакцию кнопки и IsMouseOver никак не проявляет себя. Похоже мне это совсем не нужно.
...
Рейтинг: 0 / 0
ButtonStyle
    #38621386
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ok
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / ButtonStyle
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]