それで、私は最近、この効果をコピーするという挑戦に不満を感じました:
<style>
a:hover {background-color:yellow; }
</style>
WinRTでのXAML実装の使用。
最も凝縮した解決策は何ですか?
それで、私は最近、この効果をコピーするという挑戦に不満を感じました:
<style>
a:hover {background-color:yellow; }
</style>
WinRTでのXAML実装の使用。
最も凝縮した解決策は何ですか?
さて、これが私の試みです:
<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);
}
しかし、確かにもっと良い方法があります!
<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」です。
VisualStatesとVisualStateManagerを調べる必要があると思います。ボタンコントロールだけが視覚的な状態を持っていると思います。つまり、視覚的なエンティティはボタンとして定義する必要があります(ただし、ボタンとして機能する必要はありません)。その記事の下部に、例があります。
このSOの質問は、既存のボタンからコントロールテンプレートを抽出する方法を説明するのにも役立つ場合があります。これにより、ニーズに合わせて変更できる開始点が得られます。
「最も凝縮された解決策」についても、私はそれを見たいと思います。私が見た例はすべて、20行以上のXAMLコードを必要としますが、これは私にはあまり凝縮されていないと感じています...