Использование триггеров с привязками? - PullRequest
1 голос
/ 27 апреля 2011

Это продолжение вопроса, который я отправил вчера здесь . Привязка к значкам работает с использованием фрагмента кода, опубликованного H.B., но я не могу понять, как добавить к нему условие триггера, чтобы при наведении курсора мыши отображался другой значок. Текущий код выглядит так:

    xmlns:res="clr-namespace:MyProject.Resources"
    xmlns:Helpers="clr-namespace:MyProject.Converters"
    ...
    <Image Name="imgMin"
           Grid.Column="0"
           Stretch="UniformToFill"
           Cursor="Hand" 
           MouseDown="imgMin_MouseDown">
        <Image.Source>
            <Binding Source="{x:Static res:AppResources.minimize}">
                <Binding.Converter>
                    <Helpers:IconToImageSourceConverter/>
                </Binding.Converter>
            </Binding>
        </Image.Source>
    </Image>

Что мне нужно изменить, чтобы при наведении курсора мыши отображался другой значок (res: AppResources.minimize_glow)? Я пытался возиться с получением где-то триггера, но Image.Source не принимает другого потомка, Binding не поддерживает прямой контент, изменение Image.Source на Image.Style не работает, потому что Style не может содержать Binding У меня заканчиваются идеи, и мое Google-фу не может найти ничего полезного. Кроме того, даже если бы я мог заставить Триггер работать с этим, то, вероятно, моей следующей головной болью станет привязка к выделенному значку в Триггере. Должен быть способ сделать это, верно?

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

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

<Image Name="imgMin"
       Grid.Column="0"
       Stretch="UniformToFill"
       Cursor="Hand" 
       MouseDown="imgMin_MouseDown">
    <Image.Style>
        <Style>
            <Style.Resources>
                <Helpers:IconToImageSourceConverter x:Key="IconToImageSourceConverter"/>
            </Style.Resources>
            <Setter Property="Image.Source">
                <Setter.Value>
                    <Binding Source="{x:Static res:AppResources.minimize}"
                             Converter="{StaticResource IconToImageSourceConverter}"/>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="Image.IsMouseOver" Value="True">
                    <Setter Property="Image.Source">
                        <Setter.Value>
                            <Binding Source="{x:Static res:AppResources.minimize_glow}"
                                     Converter="{StaticResource IconToImageSourceConverter}"/>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Image.Style>
</Image>
0 голосов
/ 27 апреля 2011

Вы можете использовать поведения / триггеры из System.Windows.Interactivity.dll библиотеки, которую вы можете найти в каталоге смешивания выражений.

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

Тогда вы можете создать поведение, которое присоединяется к событиям MouseEnter, MouseLeave и изменять изображение в соответствии с тем, что вы хотите.

Вы можете увидеть пример того, как это делается (посмотрите на поведение мыши): http://www.silverlightshow.net/items/Behaviors-and-Triggers-in-Silverlight-3.aspx

(Пост предназначен для Silverlight, но будет работать и для wpf).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...