[UWP] [VisualState] Пользовательское представление ListViewItem при наведении курсора

Я хотел бы добавить действия при наведении курсора на ListViewItem, но кажется, что в ListViewItem.DataTemplate состояние «PointerOver» не запускается. Я создавал собственный ItemContainerStyle, но в этом стиле я могу просто установить определенные свойства, связанные с TargetType ListViewItem. В моем случае я хотел бы иметь кнопку, которая будет видна только тогда, когда пользователь наводит курсор на элемент.

Пример изображения

Я хочу использовать VisualStateManager, но, возможно, я не понял концепцию стилей, шаблонов и взаимодействия с пользователем с промежуточными привязками.

Есть ли для этого хорошие ссылки / документация?

заранее спасибо


person M.Kalinski    schedule 23.01.2020    source источник


Ответы (1)


[UWP] [VisualState] Пользовательское представление ListViewItem при наведении курсора

Для ваших требований лучше всего XamlBehaviors отредактировать свойство witin DataTempate. Для получения подробной информации обратитесь к следующему коду.

<ListView x:Name="MyListView">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid Name="GridPanel">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="auto" />
                    <ColumnDefinition Width="auto" />
                </Grid.ColumnDefinitions>
                <TextBlock x:Name="InfoTextBlock" Text="{Binding}" />
                <TextBlock
                    x:Name="FlagTextBlock"
                    Grid.Column="1"
                    Text="Hover"
                    Visibility="Collapsed"
                    >
                    <Interactivity:Interaction.Behaviors>
                        <Interactions:EventTriggerBehavior EventName="PointerEntered" SourceObject="{Binding ElementName=GridPanel}">
                            <Interactions:ChangePropertyAction
                                PropertyName="Visibility"
                                TargetObject="{Binding ElementName=FlagTextBlock}"
                                Value="Visible"
                                />
                            <Interactions:ChangePropertyAction
                                PropertyName="Foreground"
                                TargetObject="{Binding ElementName=InfoTextBlock}"
                                Value="Red"
                                />
                        </Interactions:EventTriggerBehavior>

                        <Interactions:EventTriggerBehavior EventName="PointerExited" SourceObject="{Binding ElementName=GridPanel}">
                            <Interactions:ChangePropertyAction
                                PropertyName="Visibility"
                                TargetObject="{Binding ElementName=FlagTextBlock}"
                                Value="Collapsed"
                                />
                            <Interactions:ChangePropertyAction
                                PropertyName="Foreground"
                                TargetObject="{Binding ElementName=InfoTextBlock}"
                                Value="Black"
                                />
                        </Interactions:EventTriggerBehavior>
                    </Interactivity:Interaction.Behaviors>
                </TextBlock>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
    <x:String>Hello Test</x:String>
    <x:String>Hello Test</x:String>
    <x:String>Hello Test</x:String>
</ListView>
person Nico Zhu - MSFT    schedule 24.01.2020
comment
Вау, очень приятно знать! Спасибо за ваш ответ. - person M.Kalinski; 24.01.2020