2010-12-14 2 views
2

Это наблюдение на этот вопросРоллинг эффект в ListBox

Increase FontSize for hovered element in 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> 

Благодаря

ответ

2

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

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

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

+0

Thanx! Я собираюсь отдать это и посмотреть, в чем я закончил! Кроме того, для вашей последней части, надеюсь, я получу это наоборот :-) – Alex

1

Похоже, вы собираетесь на эффект рыбьего глаза. Есть varying solutions для WPF, которые предоставляют вам такое поведение в виде панели многократного использования, например. Они, как правило, фокусируются на изображениях, однако концепция одна и та же. В этом solution показан пример в чистом XAML.

+0

Thanx Aaron! Я посмотрел на эти примеры, и хотя они хороши, это не совсем то, что мне нужно. +1 для названия падать, хотя :-) – Alex

+0

@Alex Уверенная вещь ... Я перечитываю ваше описание, и это по-прежнему звучит как эффект рыбьего глаза для меня; как работает док Mac ... Я должен что-то упустить .../ –

+0

@Alex Я только что загрузил FishEyePanel из CodeProject, на который я ссылался; открыл и преобразовал его в решение VS2008, а верхний пример - именно то, что вам нужно (например, обменять изображение на TextBlock). Обтекание элементов в ListBox будет интересным, поскольку оно не относится к управлению компоновкой как таковой; надеюсь, что это поможет ... –

0

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