如何在DataTemplate按钮中使用Command和EventTrigger?
我有一个DataTemplate中的按钮绑定到我的ViewModel中的命令。该按钮还有一个EventTrigger,用于启动隐藏编辑控件(其按钮属于其中的一部分)的Storyboard。如何在DataTemplate按钮中使用Command和EventTrigger?
如果我拿起PreviewMouseDown事件,但Command不会被调用,故事板工作正常。如果我在EventTrigger中拾取MouseDown事件,则该命令有效,但Storyboard不会执行。
如何在单击按钮时同时执行命令和故事板?
<Button Content="Save" Command="{Binding SaveCommand}" > <Button.Triggers>
<EventTrigger RoutedEvent="Button.PreviewMouseDown">
<EventTrigger.Actions>
<BeginStoryboard Storyboard="{DynamicResource sbCloseTitleEdit}"/>
</EventTrigger.Actions>
</EventTrigger>
</Button.Triggers>
</Button>
回答:
我最终加入了代码隐藏文件为我的ResourceDictionary包含的DataTemplate解决粗暴我的问题。我不知道这是可能的,但发现这样的解释:
Is it possible to set code behind a resource dictionary in WPF for event handling?
除了使用EventTrigger开始隐藏我添加了一个点击处理程序的代码隐藏的编辑控件一个故事板。这有点笨拙,因为我必须找到相对于单击按钮的面板,因为这是唯一可用的参考,但它可以工作。
如果任何人有一个更好的解决方案仍在寻找更好的解决方案。
回答:
我试过你的代码,我发现它可以在PreviewMouseDown
上使用事件触发器正常工作,它只是首先执行该命令,然后动画会触发。
我的继承人资源
<Storyboard x:Key="sbCloseTitleEdit"> <ColorAnimation Storyboard.TargetProperty="(Rectangle.Fill).Color"
To="Blue" Duration="0:0:3" Storyboard.TargetName="rect" >
</ColorAnimation>
</Storyboard>
我的XAML
<Grid> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Button Content="Save" Command="{Binding SaveCommand}" >
<Button.Triggers>
<EventTrigger RoutedEvent="Button.PreviewMouseDown">
<EventTrigger.Actions>
<BeginStoryboard
Storyboard="{StaticResource sbCloseTitleEdit}"/>
</EventTrigger.Actions>
</EventTrigger>
</Button.Triggers>
</Button>
<Rectangle Name="rect" Width="30" Height="30"
Grid.Column="1" Fill="Red" />
</Grid>
和我的视图模型
public class MainViewModel {
public ActionCommand SaveCommand { get; private set; }
public MainViewModel()
{
SaveCommand = new ActionCommand();
}
}
public class ActionCommand : ICommand
{
public void Execute(object parameter)
{
// gets fired if event trigger is preview mode
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
}
你肯定还没有错过了什么?
回答:
我通过与其他动作沿eventtrigger内调用命令来实现这一点,你要触发:
<Button Command="{Binding AcceptCommand}" Content="Accept"> <i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<i:InvokeCommandAction Command="{Binding AcceptCommand}"/>
<triggers:UpdatePropertyAction TargetObject="{Binding RelativeSource={RelativeSource AncestorType={x:Type Controls:ChildWindow}, Mode=FindAncestor}}" TargetProperty="DialogResult" Value="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
以上是 如何在DataTemplate按钮中使用Command和EventTrigger? 的全部内容, 来源链接: utcz.com/qa/259043.html