gpt4 book ai didi

wpf - 当 EnterActions 似乎起作用时,为什么样式触发器的 Setter 不起作用

转载 作者:行者123 更新时间:2023-12-04 15:57:35 47 4
gpt4 key购买 nike

我希望当窗口获得焦点时发生一些事情。但是,这似乎不起作用:

<Window x:Class="Sample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" Background="Black"
Opacity="0.5">
<Grid>

</Grid>
<Window.Style>
<Style>
<Style.Triggers>
<Trigger Property="Window.IsActive" Value="true">
<Setter Property="Control.Background" Value="Blue" />
<Setter Property="Window.Title" Value="Testing" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Style>

</Window>

另一方面,如果我用 {Enter,Exit}Action 上的动画替换 setter 事情似乎奏效了。

<Window x:Class="Sample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" Background="Black"
Opacity="0.5">
<Grid>

</Grid>
<Window.Style>
<Style>
<Style.Triggers>
<Trigger Property="Window.IsActive" Value="true">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="Background.Color"
To="Blue" Duration="0:0:1" />
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Title">
<DiscreteObjectKeyFrame Value="Testing" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="Background.Color"
To="Black" Duration="0:0:1" />
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Title">
<DiscreteObjectKeyFrame Value="Window1" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</Style.Triggers>
</Style>
</Window.Style>

</Window>

我想这种解决方法足以满足我的目的,但我想了解为什么“简单”的方法不起作用。

附言我不能完全让语法突出显示完全工作......它似乎在几级缩进后放弃。

最佳答案

如果要根据某些条件使用触发器切换某些属性值,则需要在样式本身中设置这些属性的默认值,否则无论您在 setter 中设置什么值,属性值都将始终被 本地覆盖由于 dependency property value precedence ,这些属性的值为 。在您的情况下,您需要像这样以您的风格设置 BackgroundTitle 的值 -

<Window x:Class="Sample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300" Opacity="0.5">
<Grid>
</Grid>
<Window.Style>
<Style>
<Setter Property="Control.Background" Value="Black"/>
<Setter Property="Window.Title" Value="Window1" />
<Style.Triggers>
<Trigger Property="Window.IsActive" Value="true">
<Setter Property="Control.Background" Value="Blue" />
<Setter Property="Window.Title" Value="Testing" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Style>
</Window>

此外,您可以省略设置值,让触发器为您设置这些值。这也可以(在窗口声明时省略背景和标题)-
<Window x:Class="Sample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300" Opacity="0.5">
<Grid>
</Grid>
<Window.Style>
<Style>
<Style.Triggers>
<Trigger Property="Window.IsActive" Value="true">
<Setter Property="Control.Background" Value="Blue" />
<Setter Property="Window.Title" Value="Testing" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Style>
</Window>

关于wpf - 当 EnterActions 似乎起作用时,为什么样式触发器的 Setter 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9441229/

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