VisualStateManager不能在通用应用中工作
本文关键字:应用 工作 不能 VisualStateManager | 更新日期: 2023-09-27 18:16:00
我目前正在开发一个Windows通用应用程序,我定义了一个名为IconButton
的UserControl
IconButton.xaml
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="Common">
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation To="Red" Storyboard.TargetName="path" Storyboard.TargetProperty="(Fill).(SolidColorBrush.Color)" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid>
<Path x:Name="path" Data="{x:Bind IconPathData, Mode=OneWay}" Stretch="UniformToFill" Fill="White" />
</Grid>
IconButton.xaml.cs
public sealed partial class IconButton : UserControl
{
public static readonly DependencyProperty IconPathDataProperty = DependencyProperty.Register("IconPathData", typeof(string), typeof(IconButton), new PropertyMetadata(""));
public string IconPathData
{
get { return (string)GetValue(IconPathDataProperty); }
set { SetValue(IconPathDataProperty, value); }
}
public IconButton()
{
InitializeComponent();
}
private void UserControl_PointerEntered(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
VisualStateManager.GoToState(this, MouseOver.Name, true);
}
}
根据MSDN, GoToState
方法需要将给定名称传递给VisualState
。在我的例子中,有一个VisualState
和x:Name="MouseOver"
,所以GoToState
应该能够找到这个。
不幸的是,GoToState
总是返回false,只有当它找不到具有给定名称的VisualState
时才会发生。
我真的不知道该怎么解决这个问题。文档非常直接,网上的几个例子和我做的一样,但是他们能做到。
你能告诉我我做错了什么以及如何改正吗?
由于您没有显示IconButton.xaml
的完整内容,我假设它看起来有点像:
<UserControl
x:Class="App1.IconButton"
...
PointerEntered="UserControl_PointerEntered">
<VisualStateManager.VisualStateGroups>
...
</VisualStateManager.VisualStateGroups>
<Grid>
<Path ... />
</Grid>
</UserControl>
如果是,将VisualStateManager
移动到Grid
中(而不是作为UserControl
的直接子元素):
<UserControl
x:Class="App1.IconButton"
...
PointerEntered="UserControl_PointerEntered">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="Common">
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation To="Red" Storyboard.TargetName="path" Storyboard.TargetProperty="(Fill).(SolidColorBrush.Color)" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Path x:Name="path" ... />
</Grid>
</UserControl>