2017-10-09 391 views
1

我对WPF很新颖....我遇到了这个问题,它说“Dropdownclosed不是routedevent”。这里是我的代码:WPF DataGridComboBoxColumn DropdownClosed事件

<DataGridComboBoxColumn x:Name="Fleet_Combo" Header="Fleet" Width = "30*" ItemsSource="{Binding acTypeFleet}" SelectedItemBinding="{Binding Fleet,Mode=TwoWay}"> 
        <DataGridComboBoxColumn.EditingElementStyle> 
         <Style TargetType="ComboBox"> 
          <EventSetter Event="SelectionChanged" Handler="FleetComboBox_SelectionChanged"/> 
          <EventSetter Event="DropDownClosed" Handler="ComboBox_DropDownClosed"/> 
         </Style> 
        </DataGridComboBoxColumn.EditingElementStyle>       
       </DataGridComboBoxColumn> 

请帮忙,谢谢。

+0

相关: [如何让弹出框关闭后直接适当地设置焦点](https://stackoverflow.com/questions/9710013/how-to-get-a-combobox-to-appropriately-set-focus-directly-after -the-弹出窗口关闭) – mcalex

+0

谢谢。如果您发布它,我可以将其标记为答案。 – Heisenberg

回答

0

正如错误消息所示:DropDownClosed不是RoutedEvent,因此您无法为ComboBoxes创建样式,并让它们都通过EventSetter继承该事件。

调用该事件的解决方法是使用的事件,并将其适当挂钩。一个合适的候选人是Loaded。按照Alain's answer here获得Loaded事件:

<Style x:Key="ComboBoxCellStyle" TargetType="ComboBox"> 
    <EventSetter Event="Loaded" Handler="ComboBox_Loaded" /> 
</Style> 

从加载的情况下,你可以得到的DropDownClosed事件

private void ComboBox_Loaded(object sender, RoutedEventArgs e) 
{ 
    ((ComboBox)sender).DropDownClosed -= ComboBox_OnDropDownClosed; 
    ((ComboBox)sender).DropDownClosed += new 
    System.EventHandler(ComboBox_OnDropDownClosed); 
} 

,并从那里调用相应的处理程序:

void ComboBox_OnDropDownClosed(object sender, System.EventArgs e) 
{ 
    ... 
}