使用 Blend 的界面将数据触发器添加到样式触发器,而不是通过 xaml 代码
Posted
技术标签:
【中文标题】使用 Blend 的界面将数据触发器添加到样式触发器,而不是通过 xaml 代码【英文标题】:Adding data trigger to style trigger using Blend's interface, not through xaml code 【发布时间】:2016-03-08 16:41:17 【问题描述】:我需要一些 WPF 混合向导的帮助。这更多是为了知识,因为我已经可以通过显式更改 xaml 以某种样式实现数据触发器,但我想知道是否有办法通过 Blend 来做到这一点。
让我们从一些代码开始吧!
<Image x:Name="image" HorizontalAlignment="Center" Height="299" Margin="24,27,24,0" VerticalAlignment="Top" Width="832" RenderTransformOrigin="0.5,0.5" Source="img/SpiderLogo.png" d:IsHidden="True" Grid.RowSpan="2">
<Image.Style>
<Style>
<Style.Resources>
<Storyboard x:Key="LoadTitleScreen">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)">
<EasingDoubleKeyFrame KeyTime="0" Value="1"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.6" Value="0"/>
</DoubleAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)">
<DiscreteObjectKeyFrame KeyTime="0" Value="x:Static Visibility.Visible"/>
<DiscreteObjectKeyFrame KeyTime="0:0:0.6" Value="x:Static Visibility.Collapsed"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</Style.Resources>
<Style.Triggers>
<DataTrigger Binding="Binding IsLoginValid, Source=StaticResource viewModel" Value="true">
<DataTrigger.EnterActions>
<BeginStoryboard Storyboard="StaticResource LoadTitleScreen"/>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
一切都很好,在这里工作!现在在构建另一个图像并通过以下方式编辑其样式资源之后:
1) 在“对象和时间轴”中右击图片
2) 编辑样式
3) 创建样式资源
我可以创建故事板和整个九个故事板,但无法通过 Blend 的界面向其中添加数据触发器。我转到 Assets Menu 将 ChangePropertyAction 拖到样式上,但整个 Assets Menu 是灰色的/不起作用。
<Image x:Name="titleBackgroundImage" HorizontalAlignment="Center" Height="610" VerticalAlignment="Center" Width="899" Source="img/RPVBackground.jpg" Stretch="Fill" Margin="-9,-10,-10,-50" Grid.RowSpan="2" Visibility="Collapsed" Style="DynamicResource TitleScreenBackgroundImage">
<Image.Resources>
<Style x:Key="TitleScreenBackgroundImage" TargetType="x:Type Image">
<Style.Resources>
<Storyboard x:Key="LoadTitleScreenBackground">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="x:Null">
<EasingDoubleKeyFrame KeyTime="0:0:0.6" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:1.1" Value="1"/>
</DoubleAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="x:Null">
<DiscreteObjectKeyFrame KeyTime="0:0:0.6" Value="x:Static Visibility.Visible"/>
<DiscreteObjectKeyFrame KeyTime="0:0:1.1" Value="x:Static Visibility.Collapsed"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</Style.Resources>
</Style>
</Image.Resources>
</Image>
这就是我所坚持的,在样式资源中创建了一个不错的故事板,但无法添加触发器来调用它 =(
如果你知道怎么做,请帮忙!非常感谢!
【问题讨论】:
【参考方案1】:如果它只是你想要的触发器,并且默认情况下该窗口没有立即打开,你可以点击;
Ctrl + ALT + R
...或从顶部菜单中选择 View -> Triggers Window
并在那里管理您的触发器。
至于为什么您的“资产”选项卡显示为灰色,这可能是几个不同的原因。需要知道更多来诊断那个。第一个猜测是你只是缺少 SDK 或其他东西吗?希望这会有所帮助。
【讨论】:
嗨,克里斯,感谢您的回复。我可以在编辑样式时打开触发器窗口,但是单击“+属性”添加属性触发器什么也不做。生病检查SDK,我目前使用的是2013,所以这可能是一个问题。以上是关于使用 Blend 的界面将数据触发器添加到样式触发器,而不是通过 xaml 代码的主要内容,如果未能解决你的问题,请参考以下文章
Expression Blend 4 中的触发器面板在哪里?
为啥在使用 Caliburn Micro Conductor.OneActive 时,Blend Interaction 事件触发器会多次触发?