2011-06-02 132 views
-1

在Silverlight组合框上,当您打开下拉列表时,SelectionChanged事件不会触发,然后单击当前选定的项目。发生这种情况时,触发事件/方法的最佳方式是什么? (除了通常会触发SelectionChanged的任何事情,即他们或者单击未选定的或选定的项目;但不是当他们刚刚点击下拉菜单时)
我目前已经为列表中的项目设置了DataTemplates。我尝试附加到那些元素的MouseLeftButtonUp事件中,但是项目周围有空白,所以它不总是注册一个关闭组合框并单击项目的点击。Silverlight组合框选择已更改或重新选择事件

回答

1

你有没有考虑过“DropDownClosed”事件?

+0

是的,我已经考虑过了。问题在于,当您打开下拉菜单并点击下拉菜单之外时,它也会触发。下拉菜单关闭,所以当然会触发,但用户实际上没有点击目前选择的项目,他们没有选择,所以我不想像他们那样行事。 – 2011-06-02 20:30:42

+0

嗯,它似乎是一个混乱的东西,如果该项目目前选择然后我wouldnt再次选择它..所以这正是什么Id做的。你可以有一个布尔,selection_made = false,打开下拉列表,将其设置为yes,如果鼠标关闭,如果在dropdownclosed,它已被设置,然后使用当前选择的项目..但它很凌乱 – BugFinder 2011-06-02 20:37:14

+0

嗯,是的有点凌乱,但我会明天尝试,如果没有更好的建议出现。 – 2011-06-02 22:29:34

0

我知道自从上次评论以来已经很长时间了,但是我会发布我的解决方案,以防有人遇到同样的问题。 只有这样,我成功地“重新选择”当前选择的项目是修改这样的ComboBoxItemTemplate:

<Style TargetType="ComboBoxItem"> 
    .... 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ComboBoxItem"> 
       <Grid ... MouseLeftButtonDown="Grid_MouseLeftButtonDown"> 
       ... 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

现在,在Grid_MouseLeftButtonDown事件我取消对当前项目;然后像往常一样处理鼠标点击,选择鼠标光标下的元素。