2

所以,我最近对复制这种效果的挑战感到沮丧:

<style>
a:hover {background-color:yellow; }
</style>

在 WinRT 中使用 XAML 实现。

什么是最简洁的解决方案?

4

3 回答 3

3

好的,这是我的尝试:

<VisualStateManager.VisualStateGroups>
    <VisualStateGroup x:Name="VisualStateGroup">
        <VisualState x:Name="Normal"/>
        <VisualState x:Name="Hover">
            <Storyboard>
                <ColorAnimation To="Yellow" Duration="0"
                    Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" 
                    Storyboard.TargetName="MyTextBox" />
            </Storyboard>
        </VisualState>
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

<Grid x:Name="MyTextBox" Background="White"
        PointerEntered="MyTextBox_PointerEntered" 
        PointerExited="MyTextBox_PointerExited"
        Height="114" Width="537">
</Grid>

和这个:

private void MyTextBox_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    VisualStateManager.GoToState(this, Hover.Name, false);
}

private void MyTextBox_PointerExited(object sender, PointerRoutedEventArgs e)
{
    VisualStateManager.GoToState(this, Normal.Name, false);
}

但是,肯定有更好的方法!

于 2012-10-02T15:47:18.147 回答
2
<VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="CommonStates">
                <VisualState x:Name="Normal"/>
                <VisualState x:Name="PointerOver">
                    <Storyboard>
                        <ColorAnimation To="Yellow" Duration="0"
                Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" 
                Storyboard.TargetName="MyTextBox" />
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="Pressed"/>
            </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

RT 中的“悬停”状态为“PointerOver”。

于 2013-09-29T19:11:19.233 回答
0

我认为您必须研究 Visual States 和VisualStateManager。我认为 Button 控件是唯一具有视觉状态的控件,这意味着您的视觉实体必须定义为一个 Button(尽管它不必作为一个)。在该文章的底部,您会找到一个示例。

这个 SO-question也可能会有所帮助,描述如何从现有按钮中提取控件模板。这将为您提供一个起点,您可以根据需要进行修改。

至于“最简洁的解决方案”,我也想看看。我见过的例子都需要20多行XAML代码,对我来说感觉不是很简洁......

于 2012-06-23T13:20:40.343 回答