Роллинг эффект в ListBox - PullRequest
       33

Роллинг эффект в ListBox

2 голосов
/ 15 декабря 2010

Это продолжение этого вопроса

Увеличение размера шрифта для наведенного элемента в WPF ListBox

У меня есть ListBox, где я хочу эффект "прокатки". С самого начала все мои элементы в ListBox имеют FontSize = 12, а когда IsMouseOver = "True", они получают FontSize = 18. Теперь я хочу, чтобы элемент ниже и выше элемента IsMouseOvered получал FontSize 16. У меня такое ощущение, что это не так просто. У кого-нибудь есть идеи?

Теперь это мой ListBox

<ListBox Name="ListBox" ItemsSource="{Binding MyList}" DisplayMemberPath="Property1"> 
    <ListBox.ItemContainerStyle> 
        <Style TargetType="ListBoxItem"> 
            <Style.Triggers> 
                <Trigger Property="IsMouseOver" Value="True"> 
                    <Setter Property="TextBlock.FontSize" Value="18"/> 
                </Trigger> 
            </Style.Triggers> 
        </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 

Спасибо

Ответы [ 3 ]

2 голосов
/ 15 декабря 2010

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

Способ, которым я реализовал бы это: я бы создал класс-обертку для элементов в вашем списке, который предоставляет свойства IsMouseOver, FontSize и Content. Я бы реализовал родительский класс, который поддерживает некоторую индексируемую коллекцию этих элементов (например, массив или список) и регистрирует события PropertyChanged своих элементов, чтобы он мог знать, какой элемент в списке является мышью. в настоящее время зависания. В этом случае родительский класс будет отвечать за корректировку FontSize дочерних объектов при каждом изменении текущего элемента размещения. Все, что делает XAML - это привязка к FontSize на дочерних объектах.

Заметьте, кстати, что если вы реализуете какой-нибудь крутой эффект (такой, как тот, на который ссылается Аарон, который, кстати, не делает того, о чем вы говорили), то при изменении размеров элементов, когда IsMouseOver изменяется, перемещает их на экране таким образом, что элемент, над которым находится мышь, тоже изменяется, ваши пользователи будут выслеживать вас и убивать вас во сне.

1 голос
/ 15 декабря 2010

Похоже, вы собираетесь на рыбий глаз.Есть различные решения для WPF, которые предоставляют вам такое поведение, например, в виде панели многократного использования.Как правило, они фокусируются на изображениях, но концепция та же самая.Это решение показывает пример в чистом XAML.

0 голосов
/ 26 июля 2011

Я написал это пользовательский элемент управления , который будет имитировать приборную панель Mac (эффект Рыбий глаз).

...