如何在 UWP 应用程序悬停时更改 gridview itemtemplate 内 texblock 的颜色?
How to change color of texblock inside gridview itemtemplate on hover in UWP app?
我创建了一个 gridview
,如下图所示。其中每个项目由一个 stackpanel
包含图像和一个文本块组成。我想更改 gridviewitem
的背景颜色和悬停 gridviewitem
时 textblock
的背景颜色。
我已经通过使用 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?
根据您的要求,更好的方法是使用
XamlBehaviors
在 DataTempate
中编辑 属性。您可以使用 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>
我创建了一个 gridview
,如下图所示。其中每个项目由一个 stackpanel
包含图像和一个文本块组成。我想更改 gridviewitem
的背景颜色和悬停 gridviewitem
时 textblock
的背景颜色。
我已经通过使用 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?
根据您的要求,更好的方法是使用
XamlBehaviors
在 DataTempate
中编辑 属性。您可以使用 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>