2017-06-17 62 views
0

我正在使用WPF的CardView,添加MouseDoubleClick处理程序来处理项目单击事件,但问题是当我单击空白区域:卡片区域,它也会调用该事件,这不是我想要的,所以我想检测点击事件不在卡片项目上,或者只是禁用此事件来调用双击处理程序。WPF禁用或检测CardView空白空间单击?

<dxg:CardView ShowTotalSummary="False" ShowGroupPanel="False" SeparatorThickness="0" ShowFilterPanelMode="Never" FilterEditorShowOperandTypeIcon="False" 
          CardLayout="Rows" MaxCardCountInRow="5" ShowCardExpandButton="False" ShowGroupedColumns="False" 
          MouseDoubleClick="cvPros_MouseDoubleClick"> 
</dxg:CardView> 

enter image description here

我看到像我这样的一些问题,但它的目标是ListView控件或TreeView控件,CardView的项目没有相应的类,像ListBoxItemTreeViewItem

WPF; How to Deselect all my selected items when clicking on empty space in my ListView

WPF Treeview how to handle mouse clicks in F Treeview but not on a treeviewitem?

所以我不能使用作为这个解决方案,任何人都可以告诉我如何解决这个问题,谢谢!

回答

1

您遇到的问题是您将MouseDoubleClick事件添加到整个CardView,但它也有一个保证金触发MouseDoubleClick事件。

解决你的问题,你需要将MouseDoubleClick事件适用于你感兴趣的CardView的一部分。如果无法访问,你能做到这一点的源代码的一种方法是去除余量,应用您MouseDoubleClick事件到CardView,然后再添加一个保证金,如果这是你想要的。这post建议删除这样

保证金重新定义CardTemplate

<dxg:CardView.CardTemplate> 
    <DataTemplate> 
     <Border Margin="-11"> 
      <TextBlock Background="Red" Height="50" Width="50"/> 
     </Border> 
    </DataTemplate> 
</dxg:CardView.CardTemplate> 

重新定义x:Key="{dxgt:GridCardThemeKey ResourceKey=ContentPresenterStyle}"

<Style x:Key="{dxgt:GridCardThemeKey ResourceKey=ContentPresenterStyle, IsThemeIndependent=True}" TargetType="{x:Type dxg:GridCardContentPresenter}"> 
    <Setter Property="Margin" Value="0" /> 
</Style> 

然后,您可以使用您的CardView这样

<CardView MouseDoubleClick="MyMouseDoubleClick" Margin="10"> 

另外,您可以嵌套它在新UserControl这样

<UserControl> 
    <Grid Margin="10" > 
     <CardView MouseDoubleClick="MyMouseDoubleClick" Margin="10"> 
    </Grid> 
</UserControl> 

然后,你可以使用这样的

<MyCardView .../> 
+0

我觉得这个问题不仅是margin.Consider的故障这种情况下:第一行有4个卡项目,第二行有1个卡片项目,如果我们点击第二行,即使没有点击唯一的一个卡片项目,也会调用双击,这个问题不能通过你的解决方案来解决。所以我想知道是否有一个解决方案,当我点击卡片视图项目,而不是保证金,没有任何其他空白空间时,只能执行点击事件。 – starkshang