Изменить изображение ToggleButton при нажатии Silverlight - PullRequest
2 голосов
/ 19 января 2012

Я не могу понять, как изменить изображение ToggleButton при нажатии. Я посмотрел бесчисленные примеры, и все они устарели и больше не работают. Или, если они это сделают, я не могу заставить их работать. У кого-нибудь есть актуальный пример, на который я мог бы взглянуть, или какие-либо предложения?

Сначала я попытался сделать это в коде. В примере, который я нашел, использовался BitmapImage, но это больше невозможно, поскольку метод BeginInit не может быть использован по соображениям безопасности.

Далее я перепробовал множество триггеров стилей, но у меня получилось много ошибок компиляции, даже если они были напрямую скопированы и изменены, чтобы соответствовать правильным параметрам. Так что я застрял. Я не могу понять, как использовать EventTrigger для этого, и, кажется, не работают какие-либо старые примеры. У кого-нибудь есть идеи?

Ответы [ 2 ]

2 голосов
/ 19 января 2012

Почему бы не что-то вроде:

<ToggleButton x:Name="b">
  <Image Src="myImage.png" Visibility="{Binding ElementName=b,Path=IsChecked,Converter="{StaticResource BooleanToVisibilityConverter}}"/>
  <Image Src="myOtherImage.png" Visibility="{Binding ElementName=b,Path=IsChecked,Converter="{StaticResource BooleanToVisibilityConverter,ConverterParameter=Invert}}"/>
</ToggleButton>

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

Редактировать:

ВыВам нужно определить конвертер, чтобы он мог преобразовать bool? из свойства IsChecked в перечисление Visibility.Это то, что делает весь код привязки.Здесь есть базовая реализация здесь , которая преобразуется в Visibility.Visible при значении true и Visibility.Collapsed при значении false.Вам необходимо добавить проверку для parameter, чтобы она инвертировала видимость при передаче Invert (для переключения между двумя изображениями).

Другой способ сделать это - определить изображения в стилеи используйте визуальные состояния для Checked и Unchecked, чтобы перевернуть изображения.Вы можете применить стиль к нескольким кнопкам, но сложно варьировать изображения для каждой кнопки (что делает мое решение).

Это способ настройки ресурса

XAML

<!-- Place this in your window -->
xmlns:converters="clr-namespace:NameSpace"

<!-- Place this above your root UI -->
<Window.Resources>
    <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</Window.Resources>

Тогда используйте конвертер здесь BooleanToVisibilityConverter

0 голосов
/ 04 августа 2013

вы можете использовать ImageToggleButton и ImageToggleButtonSideBySide (если вы хотите, чтобы кнопка переключения в стиле Mac [или радио с двумя состояниями могло вызывать ее]) из проекта ImageButtons ClipFlair кодовая база проекта

...