【发布时间】:2014-01-09 03:09:20
【问题描述】:
在以下 XAML 中点击 StackPanel 将触发 MyCommand1 和 MyCommand2:
<phone:LongListSelector ItemsSource="{Binding SomeSource}">
<phone:LongListSelector.ItemTemplate>
<DataTemplate >
<Grid>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Tap">
<i:InvokeCommandAction Command="{Binding MyCommand1}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<StackPanel >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Tap">
<i:InvokeCommandAction Command="{Binding MyCommand2}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</StackPanel>
</Grid>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
如何确保只触发MyCommand2,同时保持正确的 MVVM 样式?
【问题讨论】:
-
尝试为 stackpanel 设置一些背景颜色。但不确定
-
命令的婴儿车怎么样。你能处理来自命令婴儿车的事件参数吗?这样它就不会为
Grid触发 -
你有一个 Grid 并且里面有一个空的 StackPanel。您正在尝试捕捉 Tap 事件,但您甚至没有显示任何内容。点击事件是如何触发的?当 StackPanel 或 Grid 中没有元素时,选项卡事件的原始来源是什么?我建议你改变你的设计。此外,向我们解释更多关于 Tap 所做的事情以及它来自哪里?
-
@devhedgehog,这只是一个例子......如果真的很重要,我可以在 StackPanel 和 Grid 上设置宽度、高度和背景,这样用户就可以看到它。但这不是这里的问题。问题是防止事件冒泡到父 UI 元素...
-
你可以通过将handled设置为true来处理事件,它应该停止冒泡
标签: wpf xaml mvvm windows-phone-8