WPF技术问询:如何在XAML中通过类按钮控件为绑定属性设固定值?
解决方案
可以纯通过XAML实现按钮点击为绑定的int属性设置固定值,以下是两种可行方案:
方案一:使用行为库(Microsoft.Xaml.Behaviors.Wpf)
这是比较直观的方式,需要引用官方的行为库(NuGet包:Microsoft.Xaml.Behaviors.Wpf)。通过SetPropertyAction在按钮点击时直接修改绑定属性的值:
<!-- 先添加命名空间 --> xmlns:i="http://schemas.microsoft.com/xaml/behaviors" <!-- 绑定到ViewModel的TestInt属性 --> <Button Content="设置为1"> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <i:SetPropertyAction TargetObject="{Binding}" PropertyName="TestInt" Value="1"/> </i:EventTrigger> </i:Interaction.Triggers> </Button> <Button Content="设置为2"> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <i:SetPropertyAction TargetObject="{Binding}" PropertyName="TestInt" Value="2"/> </i:EventTrigger> </i:Interaction.Triggers> </Button>
方案二:纯原生WPF XAML(无需额外依赖)
利用Storyboard和ObjectAnimationUsingKeyFrames,通过按钮的Tag属性存储要设置的固定值,点击时触发动画修改绑定属性:
<Button Content="设置为1" Tag="1"> <Button.Triggers> <EventTrigger RoutedEvent="Button.Click"> <BeginStoryboard> <Storyboard> <ObjectAnimationUsingKeyFrames Storyboard.Target="{Binding}" Storyboard.TargetProperty="TestInt"> <DiscreteObjectKeyFrame KeyTime="0" Value="{Binding Tag, RelativeSource={RelativeSource AncestorType=Button}}"/> </ObjectAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> </EventTrigger> </Button.Triggers> </Button> <Button Content="设置为2" Tag="2"> <Button.Triggers> <EventTrigger RoutedEvent="Button.Click"> <BeginStoryboard> <Storyboard> <ObjectAnimationUsingKeyFrames Storyboard.Target="{Binding}" Storyboard.TargetProperty="TestInt"> <DiscreteObjectKeyFrame KeyTime="0" Value="{Binding Tag, RelativeSource={RelativeSource AncestorType=Button}}"/> </ObjectAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> </EventTrigger> </Button.Triggers> </Button>
额外提示:你原ComboBox代码的问题
你提供的ComboBox代码中,多个ComboBoxItem都设置了IsSelected="True",这会导致只有最后一个Item被选中(因为同一时间只能有一个选中项)。正确的做法是只给默认选中的那个Item设置IsSelected="True"。
内容的提问来源于stack exchange,提问作者user22527635
相关产品推荐
相关产品推荐

