使用MVVM模式时触发动画的最佳方法是什么?更具体地说,我的表格有几个字段.当用户点击保存时Button,我想显示一个动画.我已经能够通过暴露属性ShowMessage并将其设置为True 来实现这一点,并DataTrigger获取此值并启动动画.但是,当动画仍处于活动状态时,我想将表单重置为干净状态.到目前为止,我通过订阅Complete事件Storyboard并重置视图模型在该事件上的状态来完成重置.
理想情况下,我希望能够以某种方式从视图模型触发动画(因为保存将是一个异步操作)并让动画运行完成.我现在拥有它的方式不起作用,因为一旦我更改了ShowMessage属性的值(在重置时),动画就会停止并且不会运行完成.
有没有人有更好的解决方案?
谢谢!
这是我的XAML:
<TextBlock Name="SeverityText"
Grid.Column="1"
Grid.Row="0"
Foreground="Red">
<TextBlock.Triggers>
<DataTrigger Binding="{Binding Path=Severity}">
<DataTrigger.Value>
<sm:Severity>Warning</sm:Severity>
</DataTrigger.Value>
<Setter TargetName="SeverityText"
Property="Foreground"
Value="Yellow" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=Severity}">
<DataTrigger.Value>
<sm:Severity>Information</sm:Severity>
</DataTrigger.Value>
<Setter TargetName="SeverityText"
Property="Foreground"
Value="White" />
</DataTrigger>
</TextBlock.Triggers>
<TextBlock>Severity:</TextBlock>
<TextBlock Text="{Binding Path=Severity}" />
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
这是我的错误消息:
在"ContentPresenter"类型上找不到静态成员"ForegroundProperty".
sm:严重性是我导入的枚举.
有没有办法在XAML中创建条件绑定?
例:
<Window x:Name="Me" DataContext="{Binding ElementName=Me}">
<TextBlock>
<TextBlock.Text>
<SelectBinding Binding="{Binding MyValue}">
<Case Value="Value1" Value="value is 1!">
<Case Value="Value2" Value="value is 2!">
<Case Value="Value3" Value="value is 3!">
</SelectBinding >
</TextBlock.Text>
</TextBlock>
</Window>
Run Code Online (Sandbox Code Playgroud)
最重要的是,我想根据另一个值来设置TextBlock值,该值Binding可以是每个案例(或案例)被发送到适当的输出/设置器的情况列表.
也许我可以DataTrigger在我的情况下使用,我只是不知道我将如何做到这一点,因为我没有DataTemplate在这里使用任何.
更新
在我的场景中,我有一个UserControl有几个控件.我希望根据UserControl.DataContext数据项中的某个属性,用户控件中的其他控件应该相应地受到影响.基本上与我上面的例子相同,每个案例都会导致一个Setters 列表.
我有几个项目控件,只有在满足某个条件时才需要为其PreviewMouseLeftButtonDown事件附加一个事件处理程序.
我用一个数据触发器为我的控件设计了一个样式,我检查了它的绑定并尝试使用BorderThickness属性的常规属性设置器来查看数据触发器的工作原理.(确实......)
当使用事件设置器以与常规属性设置器相同的方式满足datatrigger的条件时,如何应用我的datatrigger来附加事件处理程序?
类似的东西:
<Style TargetType="{x:Type ItemsControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding Turn}" Value="True">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="ItemsControl_MouseLeftButtonDown"></EventSetter>
</DataTrigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
此标记在eventsetter行上抛出以下异常:
'Set property 'System.Windows.EventSetter.Event' threw an exception.'
Run Code Online (Sandbox Code Playgroud)
内在例外:
{"Value cannot be null.\r\nParameter name: value"}
Run Code Online (Sandbox Code Playgroud) 我正试图设置一个触发器来显示一个文本块,当我得到的单元格的值是某种类型.
我已成功设法在相同的情况下显示图像,但在这种情况下,我不想要图像,而是一些文本.
已注释出行以进行测试以使其正常工作.注释掉的代码有效!文本块text = xxx在里面,没有.
这是我的尝试
<wpfToolkit:DataGridTemplateColumn Header="P" Width="20">
<wpfToolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<!-- <DataTemplate.Triggers> -->
<!-- <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="1"> -->
<TextBlock Text="XXX" />
<!-- </DataTrigger> -->
<!-- <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="2"> -->
<!-- <Setter TargetName="cablePrecedenceIndicatorImage" Property="Source" Value="Resources\Images\small_exclamation_mark.png"/> -->
<!-- </DataTrigger> -->
<!-- </DataTemplate.Triggers> -->
</DataTemplate>
</wpfToolkit:DataGridTemplateColumn.CellTemplate>
</wpfToolkit:DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud) <ListBox.ItemTemplate>
<DataTemplate>
<Grid x:Name="grid">
<Grid.Background>
<SolidColorBrush x:Name="backgroundBrush" Color="Transparent" Opacity="0.1"/>
</Grid.Background>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsExpanded}" Value="True">
<Setter TargetName="backgroundBrush" Property="Color" Value="Green" />
</DataTrigger>
<Trigger SourceName="grid" Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetName="backgroundBrush"
Storyboard.TargetProperty="Color"
To="White" Duration="0:0:1.5"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetName="backgroundBrush"
Storyboard.TargetProperty="Color"
AccelerationRatio="1" Duration="0:0:1.5" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)
不编译错误'无法找到触发器目标'backgroundBrush'.'
如果我删除DataTrigger它将编译并工作.如果我更改DataTrigger以使用TargetName="grid" Property="Background"它将编译并工作(但没有所需的不透明度).
我哪里错了?
我想根据另一个ComboBox中是否选择了一个项来启用/禁用ComboBox.我能够通过在Style上设置触发器来使其工作,但这会覆盖我对组合框的自定义全局样式.有没有另一种方法来获得相同的功能而不会失去我的风格?
<ComboBox Grid.Column="1" Grid.Row="1"
Name="AnalysisComboBox"
MinWidth="200"
VerticalAlignment="Center" HorizontalAlignment="Left"
ItemsSource="{Binding Path=AvailableAnalysis}">
<ComboBox.Style>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="IsEnabled" Value="True" />
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedItem,ElementName=ApplicationComboBox}" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
Run Code Online (Sandbox Code Playgroud) 我在主视图上有一个ComboBox和一个Button,我想在按钮上应用一个样式,这样当组合框索引设置为1时,按钮变为可见(最初它是隐藏的).这是我的XAML代码:
<Grid>
<StackPanel Orientation="Vertical" Margin="10">
<ComboBox Name="comboBox"/>
<Button Name="myBtn" Content="Hello" Visibility="Hidden">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=comboBox, Path=SelectedIndex}" Value="1">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)
有人在这里问了一个关于这个的问题,而且我做了几乎相同的事情,但它不起作用,即使索引更改为1,按钮仍然隐藏.最初在后面的代码中填充了comobox有2件物品.任何帮助表示赞赏.
我想创建一个更新触发器,
我可以在“BEGIN”和“END”之间创建一个变量,并通过 select sql 语句的查询设置值吗?然后通过判断这个变量来执行“if”“else”语句
我想比较两个动态值User_id和user_id相等并设置一个属性Cursor.此外,当光标是手动时,我必须执行一个功能.怎么做?这是我正在使用的代码:
<DataTrigger Binding="{Binding Path=User_id}" Value="{Binding Path=user_id}">
<Setter Property="Cursor" Value="Hand"/>
</DataTrigger>
Run Code Online (Sandbox Code Playgroud) datatrigger ×10
wpf ×9
xaml ×3
c# ×2
animation ×1
binding ×1
combobox ×1
data-binding ×1
datatemplate ×1
eventsetter ×1
foreground ×1
isenabled ×1
mvvm ×1
sqlite ×1
storyboard ×1
styles ×1
textblock ×1