鼠标悬停网格后,更改网格内元素的颜色

时间:2017-08-29 17:23:34

标签: c# wpf triggers

我正在使用WPF应用程序。我有一个按钮,其中包含一个带有TextBlock和Path元素的Grid,如下所示:

func isTheEarthFlat(withUserIQ userIQ: Int, completionHandler: (Bool) -> Void) {
    let result: Bool
    defer {
       completionHandler(result)
    }
    if userIQ > 10 {
        result = false
    } else {
        result = true
    }
}

我想要实现的是,一旦我用鼠标将网格悬停在按钮内,我希望文本块内的文本前景变为白色,路径元素的填充颜色也变为白色。

我尝试做的是为网格声明一种样式,如下所示:(button_special_hover)

<Button x:Name="btn"  Margin="1">
     <Button.Content>
          <Grid  Style="{DynamicResource button_special_hover}">
               <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="4*"/>
                    <ColumnDefinition Width="1*" />
                    <ColumnDefinition Width="15*" />
                </Grid.ColumnDefinitions>
                <TextBlock x:Name="tx" TextWrapping="Wrap" Text="{DynamicResource MenuString}" Grid.Column="2" />
                <Path x:Name="path" Stretch="Fill" Fill="{DynamicResource MarkerBrush}" Data="M 65.3334,41.3334C 65.3334,45.0133 62.3467,48 58.6667" Grid.Column="0" />
        </Grid>
    </Button.Content>

我没有得到我想要的东西。一旦我将鼠标悬停在网格上,就没有任何反应。只有当我将Textblock悬停在网格内时,文本才会变为白色。一旦我盘旋在路径上,没有任何反应。

一旦我将网格前景和路径填充都转换为白色,我怎么能实现这一点?谢谢!

1 个答案:

答案 0 :(得分:3)

您的问题是您在路径元素上指定了填充。

注意:我通过添加“41.3334”修复了“数据”。

<Path x:Name="path" Stretch="Fill" Fill="{DynamicResource MarkerBrush}" Data="M 65.3334,41.3334C 65.3334,45.0133 62.3467,48 58.6667,41.3334" Grid.Column="0" />

当你这样做时,你无法覆盖它。如果您在样式中指定了它,那么您将获得所需的结果。

从路径中删除填充:

<Path x:Name="path" Stretch="Fill" Data="M 65.3334,41.3334C 65.3334,45.0133 62.3467,48 58.6667,41.3334" Grid.Column="0" />

并添加填充样式:

<Style x:Key="button_special_hover" TargetType="{x:Type Grid}">
    <Setter Property="Background" Value="Transparent"/>
    <Style.Resources>
        <Style TargetType="{x:Type TextBlock}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Grid},
                                    Path=IsMouseOver}" Value="True">
                    <Setter Property="Foreground" Value="White"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
        <Style TargetType="{x:Type Path}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Grid},
                                    Path=IsMouseOver}" Value="True">
                    <Setter Property="Fill" Value="White"/>
                </DataTrigger>
            </Style.Triggers>
            <!-- "All I did was add this line below" -->
            <Setter Property="Fill" Value="{DynamicResource MarkerBrush}"/>
        </Style>
    </Style.Resources>
</Style>
相关问题