Как изменить цвет текстового блока внутри элемента сетки вида при наведении курсора в приложении UWP? - PullRequest
1 голос
/ 28 января 2020

Я создал gridview, как показано на рисунке ниже. В котором каждый элемент состоит из stackpanel, содержащего и изображение, и текстовый блок. Я хочу изменить цвет фона gridviewitem и textblock при наведении gridviewitem.

enter image description here

Мне удалось изменить цвет фона элемента gridview с помощью PointerOverBackground в gridviewitempresenter. Как я могу изменить цвет текстового блока при наведении?

Я пробовал этот код, но я уверен, что будет лучший способ добиться этого

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

1 Ответ

1 голос
/ 30 января 2020

Как изменить цвет текстового блока внутри элемента сетки вида при наведении курсора в приложении UWP?

Для ваших требований лучше использовать 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...