5

这是交互元素内部交互元素的一个古老问题,但我希望 ScatterViewItem 包含其他表面交互元素,例如 SurfaceButton 或 SurfaceCheckBox。我的所有元素都在那里,它们会对点击等做出反应。问题是,一旦我单击不包含控件的区域,我只会获得正常的 ScatterView 行为。

即使联系人在 SurfaceButton 或 SurfaceCheckbox 上,是否有一个优雅的解决方案允许拖动?

例如

<s:ScatterView >    
    <Grid Width="200" Height="200">
        <s:SurfaceButton />
    </Grid>
</s:ScatterView>
4

3 回答 3

1

在表面社区论坛上问了同样的问题后,得到的回应是这与所有 WPF 控件行为一致。例如,如果您将交互元素添加到列表框,则当鼠标悬停在按钮上时,ListBox 不会对交互做出反应。

如果其他人遇到这个问题,最好通过控件的设计来解决这个问题,而不是试图一起破解这个行为。控件行为应从一个应用程序到另一个应用程序以及一个控件到另一个控件保持一致。

于 2009-06-16T07:55:01.633 回答
0

您可以通过侦听其中一个子控件上的 ContactLeave 事件来“破解”此行为,并在其中调用 contact.Capture(scatterviewitem)。这将告诉 svi 接管对联系人的收听和响应。但是,这导致行为与 Surface 的其他部分不一致,并且可能会造成混淆。它甚至与自身也不一致......这使得无需抬起手指就可以从内部控制切换到 SVI,但用户仍然必须抬起手指才能切换回内部控制。

于 2010-12-23T16:37:16.507 回答
0

为了解决这个问题,区分预览和非预览事件很重要:

http://eightyeightpercentnerd.blogspot.com/2008/06/wpf-preview-vs-non-preview-events.html

所以你可以决定你想听哪个事件。

但是,作为一般建议,如果不应进一步路由事件,将事件的 Handled Flag 设置为 true 始终是一个好主意。

于 2010-12-23T17:00:52.563 回答