这是交互元素中交互元素的古老问题,但我希望ScatterViewItem包含其他表面交互元素,例如SurfaceButton或SurfaceCheckBox。我已经拥有了所有的元素,他们对点击等做出反应。问题是,一旦我点击了一个不包含控件的区域,我只能获得正常的ScatterView行为。
即使联系人位于SurfaceButton或SurfaceCheckbox上,是否有优雅的解决方案允许拖动?
e.g。
<s:ScatterView >
<Grid Width="200" Height="200">
<s:SurfaceButton />
</Grid>
</s:ScatterView>
答案 0 :(得分:1)
在表面社区论坛上提出同样的问题之后,回答是这与所有WPF控制行为一致。例如,如果将交互式元素添加到列表框中,当鼠标悬停在按钮上时,ListBox将不会对交互做出反应。
如果有其他人遇到这个问题,最好通过设计控件来解决这个问题,而不是试图一起破解这种行为。从一个应用程序到另一个应用程序以及一个控件到另一个应用程
答案 1 :(得分:0)
你可以通过监听其中一个子控件上的ContactLeave事件来“破解”这种行为,并调用contact.Capture(scatterviewitem)。这将告诉svi接管听取和回复联系人。但是, 会导致行为与Surface的其他部分不一致,并且可能会造成混淆。它甚至与自身也不一致...这使得可以在不抬起手指的情况下从内部控制切换到SVI,但用户仍然必须抬起手指才能切换回内部控制。
答案 2 :(得分:0)
要解决此问题,区分预览和非预览事件非常重要:
http://eightyeightpercentnerd.blogspot.com/2008/06/wpf-preview-vs-non-preview-events.html
因此,您可以决定要收听哪个事件。
然而,作为一般性建议,如果事件的Handled Flag没有被进一步路由,那么将其设置为true总是一个好主意。