Можно ли использовать VisualStateManager для применения поведения при наведении курсора на сетку XAML?

У меня есть страница XAML UWP, которая определяет GridView. Каждый отдельный элемент GridView представляет собой сетку. Что-то вроде этого:

    <GridView Name="TheGridView" ItemsSource="{x:Bind stuff}">

        <GridView.ItemTemplate>
            <DataTemplate x:DataType="more stuff">
                <Grid Background="{StaticResource TheBlackColor}">

                    ...stuff here...                    

                </Grid>
            </DataTemplate>
        </GridView.ItemTemplate>

   </GridView>

Я хотел бы изменить цвет фона сетки для элемента при наведении указателя мыши на него (с TheBlackColor на что-то другое). Я знаю, что могу поместить события PointerEntered и PointerExited в сетку, а затем в свой код позади я могу установить свойство background, но это похоже на то, для чего предназначен VisualStateManager.

Однако я не могу понять, как заставить VisualStateManager работать для этого. Если я определяю визуальные состояния в XAML, я предполагаю, что все равно подключусь к событиям PointerEntered и PointerExited в Grid, но в моем коде позади я бы вызвал GoToState для переключения состояний. Однако я не знаю, как сообщить GoToState, для какого элемента в дереве XAML необходимо изменить визуальное состояние. Я бы подумал, что просто передал бы зависший элемент сетки первому параметру GoToState (он был дан мне как «отправитель» в моем событии PointerEntered) - за исключением того, что я не могу, потому что первый параметр GoToState - это элемент управления и Сетка не является производным от Control.


person Auth Infant    schedule 11.05.2018    source источник


Ответы (1)


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

<Page
    x:Class="VisualStateTest.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:VisualStateTest"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"
    xmlns:Core="using:Microsoft.Xaml.Interactions.Core"
    xmlns:Media="using:Microsoft.Xaml.Interactions.Media"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <Interactivity:Interaction.Behaviors>
            <Core:EventTriggerBehavior EventName="PointerEntered">
                <Core:ChangePropertyAction PropertyName="Background">
                    <Core:ChangePropertyAction.Value>
                        <SolidColorBrush Color="Red"/>
                    </Core:ChangePropertyAction.Value>
                </Core:ChangePropertyAction>
            </Core:EventTriggerBehavior>
        </Interactivity:Interaction.Behaviors>
    </Grid>
</Page>
person Nico Zhu - MSFT    schedule 14.05.2018