gpt4 book ai didi

c# - 在 VisualStateManager 中交换画笔

转载 作者:行者123 更新时间:2023-11-30 22:00:36 25 4
gpt4 key购买 nike

我正在尝试为具有玻璃外观的画笔创建自定义样式。我让它看起来像我想要的那样,但我无法让 Pressed 行为起作用。

按下的外观只是其中一个刷子反转的正常外观。我已将两个画笔都设置为资源并尝试了 ObjectAnimationUsingKeyFrames,但它似乎没有用。这个想法是这样的:

<VisualState x:Name="Pressed">
<Storyboard>
<!-- swap the brush from {StaticResource ButtonGlassBrushNormal} to
{StaticResource ButtonGlassBrushPressed -->
</Storyboard>
</VisualState>

这是我的资源和风格:

<LinearGradientBrush x:Key="ButtonGlassBrushNormal" EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#00000000" Offset="0.31"/>
<GradientStop Color="White"/>
</LinearGradientBrush>
<LinearGradientBrush x:Key="ButtonGlassBrushPressed" EndPoint="0.5,0" StartPoint="0.5,1">
<GradientStop Color="White"/>
<GradientStop Color="#00000000" Offset="0.31"/>
</LinearGradientBrush>
<ControlTemplate x:Key="ButtonControlTemplate1" TargetType="{x:Type Button}">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="Pressed">
<Storyboard>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="_glassBorder"
Storyboard.TargetProperty="Background"
Duration="0:0:1"
RepeatBehavior="Forever">
<ObjectAnimationUsingKeyFrames.KeyFrames>
<DiscreteObjectKeyFrame KeyTime="0:0:1" Value="{StaticResource ButtonGlassBrushPressed}" />
</ObjectAnimationUsingKeyFrames.KeyFrames>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" VerticalAlignment="Top" Margin="0,0,0,-21.167" CornerRadius="5">
<Border.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="#FF803A3A" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<Border BorderThickness="1" CornerRadius="5" x:Name="_glassBorder" Background="{StaticResource ButtonGlassBrushNormal}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</Border>
</Grid>
</ControlTemplate>

我猜这会非常简单,但我做错了什么?

最佳答案

不要在 Storyboard 上设置持续时间,也不要设置零 KeyTime。此外,您还必须声明 MouseOver 状态,否则 Pressed 状态将持续到鼠标离开 Button 为止:

<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver"/>
<VisualState x:Name="Disabled"/>
<VisualState x:Name="Pressed">
<Storyboard>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="_glassBorder"
Storyboard.TargetProperty="Background">
<ObjectAnimationUsingKeyFrames.KeyFrames>
<DiscreteObjectKeyFrame KeyTime="0:0:0"
Value="{StaticResource ButtonGlassBrushPressed}"/>
</ObjectAnimationUsingKeyFrames.KeyFrames>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>

关于c# - 在 VisualStateManager 中交换画笔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28398641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com