这是我在C#和XAML中的示例UWP代码
我在MainPage方法中创建了一个超链接按钮,并设置了诸如前景和背景之类的样式属性。
现在我想在PointerEntered事件像鼠标悬停一样触发时更改背景色和前景色,在这种情况下,仅字体大小在变化,而颜色没有变化
public MainPage(){
this.InitializeComponent();
var hLinkButton = new HyperlinkButton();
hLinkButton.Name = "LearnMoreHyperLink";
hLinkButton.Content = "Learn More...";
hLinkButton.Background = new SolidColorBrush(Colors.Red);
hLinkButton.Foreground = new SolidColorBrush(Colors.White);
hLinkButton.FontWeight = FontWeights.SemiBold;
hLinkButton.FontSize = 18.0;
hLinkButton.PointerEntered += OnPointerEntered;
LayoutGrid.Children.Add(hLinkButton);
}
private void OnPointerEntered(object sender, PointerRoutedEventArgs e){
var hLButton = sender as HyperlinkButton;
hLButton.Background = new SolidColorBrush(Colors.White);
hLButton.Foreground = new SolidColorBrush(Colors.Red);
hLButton.FontSize = 30.0;
}
// Only fontsize effecting on mouseover, background and foreground is not working
最佳答案
您可以覆盖HyperlinkButton的样式模板以实现此目的。
为此,您需要右键单击HyperLinkButton>编辑模板>编辑副本。
然后将相关代码添加到可视状态。在您的情况下,视觉状态为“ PointerOver
”。
下面的代码将使HyperLinkButton的前景变为红色,背景变为白色。
<VisualState x:Name="PointerOver">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="#FFFF0000" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
Storyboard.TargetProperty="Background">
<DiscreteObjectKeyFrame KeyTime="0" Value="#FFFFFFFF" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
编辑
在c#代码中,您正在执行的操作是更改
HyperLinkButton
的背景和前景颜色,该颜色将覆盖控件的“正常”视觉状态的颜色。当指针位于控件上方时,默认控件样式将在XAML(用于“ PointerOver”状态)正在显示其应具有的颜色,因此,只有从控件中删除指针后,您才能看到更改。因此,在我看来,覆盖控件的xaml样式是PointerOver事件的正确和最佳解决方案。
请询问有关此问题的其他任何问题。如果需要,我很乐意提供适当的解释。
关于c# - 在UWP中指针输入时如何更改HyperlinkButton背景和前景色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47345504/