如何在 UWP 应用程序悬停时更改 gridview itemtemplate 内 texblock 的颜色?

How to change color of texblock inside gridview itemtemplate on hover in UWP app?

我创建了一个 gridview,如下图所示。其中每个项目由一个 stackpanel 包含图像和一个文本块组成。我想更改 gridviewitem 的背景颜色和悬停 gridviewitemtextblock 的背景颜色。

我已经通过使用 gridviewitempresenter 中的 PointerOverBackground 成功地更改了 gridview 项目的背景颜色。 如何在悬停时更改文本块的颜色?

我试过这个代码,但我相信会有更好的方法来实现这个

 private void StackPanel_PointerEntered(object sender, PointerRoutedEventArgs e)
 {
     StackPanel sp = (StackPanel)sender;

     foreach (var item in sp.Children)
     {
         if (item.GetType().Equals(typeof(TextBlock)))
         {
             TextBlock tb = item as TextBlock;
             brush = new SolidColorBrush();
             brush.Color = Color.FromArgb(0, 0, 0, 0);
             tb.Foreground = brush;
         }
     }
 }

How to change color of texblock inside gridview itemtemplate on hover in UWP app?

根据您的要求,更好的方法是使用 XamlBehaviorsDataTempate 中编辑 属性。您可以使用 EventTriggerBehavior 检测指针悬停事件,然后编辑文本块的 属性。详情请参考以下代码。

<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>