代码之家  ›  专栏  ›  技术社区  ›  Fermin

border元素的mouseover状态

  •  2
  • Fermin  · 技术社区  · 16 年前

    我的页面上有一个border元素,其中包含网格中包含的一些textBlock元素,例如(简化):

    <Border Style="{StaticResource borderStyle}">
      <Grid Background="Transparent">
        <Grid.RowDefinitions>
          <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
          <ColumnDefinition/>
          <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <TextBlock Text="Something" Grid.Column="0" Grid.Row="0" />
        <TextBlock Text="Something else" Grid.Column="1" Grid.Row="0" />
      </Grid>
    </Border>
    

    我定义了以下样式:

    <Style x:Key="borderStyle" TargetType="Border">
      <Setter Property="CornerRadius" Value="0,0,15,15"/>
      <Setter Property="Background" Value="Black"/>
      <Setter Property="Opacity" Value="0.6"/>
    </Style>
    

    如何将VisualStateGroup(或类似的东西)添加到样式中以更改鼠标悬停时的不透明度?我似乎不能让它对边界元素起作用,有什么原因吗?

    1 回复  |  直到 16 年前
        1
  •  2
  •   Prince Ashitaka    16 年前

    VSM将单独在ControlTemplate内部工作。这就是原因。那里没有模板,这就是你不能让它工作的原因。

    或者,您可以使用事件触发器。如下所示。

    <Grid x:Name="LayoutRoot" Background="White">
            <VisualStateManager.VisualStateGroups>
                <VisualStateGroup x:Name="VisualStateGroup">
                    <VisualStateGroup.Transitions>
                        <VisualTransition GeneratedDuration="0">
                            <Storyboard/>
                        </VisualTransition>
                    </VisualStateGroup.Transitions>
                    <VisualState x:Name="Normal"/>
                    <VisualState x:Name="MouseOverState">
                        <Storyboard>
                            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderThickness)" Storyboard.TargetName="border">
                                <DiscreteObjectKeyFrame KeyTime="0">
                                    <DiscreteObjectKeyFrame.Value>
                                        <Thickness>3</Thickness>
                                    </DiscreteObjectKeyFrame.Value>
                                </DiscreteObjectKeyFrame>
                            </ObjectAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>
            <Border x:Name="border" BorderBrush="Black" BorderThickness="1" Height="143" Margin="164,79,191,0" VerticalAlignment="Top">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="MouseEnter">
                        <ei:GoToStateAction StateName="MouseOverState" TargetObject="{Binding ElementName=userControl}"/>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </Border>
        </Grid>