2014-03-06 53 views
0

我有我的comboBox頂部的按鈕,我收到了來自其他開發人員的元素,我不能徹底改變它。我需要發生的是當我將鼠標懸停在組合框打開的按鈕上時,當我離開時它將關閉。當我點擊按鈕時,它會觸發一個功能。問題是,當我將鼠標懸停在按鈕上時,comboBox變得焦點,我陷入了無限循環的打開關閉(也許還有其他錯誤)。但它不起作用。擴展ComboBox導致無限循環的按鈕

<Grid Margin="10,0,10,0" Grid.Column="1"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="85*"/> 
     <ColumnDefinition Width="15*"/> 
    </Grid.ColumnDefinitions> 
    <ComboBox Height="30" Name="Combo2" 
       Style="{StaticResource CategoryComboBox}" 
       SelectionChanged="ComboBox_SelectionChanged2" 
       Grid.ColumnSpan="2" Grid.Column="0"> 
     <ComboBoxItem Content="ComboBox Item 1 (Example)" /> 
     <ComboBoxItem Content="ComboBox Item 2 (Example)" /> 
     <ComboBoxItem Content="ComboBox Item 3 (Example)" /> 
     <ComboBoxItem Content="ComboBox Item 4 (Example)" /> 
    </ComboBox> 
    <Button MouseEnter="MouseEnter2" MouseLeave="MouseLeave2" Name="Menu_Btn2" 
      Click="GotoMenu" Style="{StaticResource CategoryButton}" Grid.Column="0" 
      Content="Category Name 2" Margin="20,0,0,0" FontSize="16" 
      FontFamily="pack://application:,,,/Fonts/#Univers LT Std 57 Cn" /> 
</Grid> 

代碼:

private void MouseEnter2(object sender, RoutedEventArgs e) 
{ 
    Combo2.IsDropDownOpen = true; 
} 

private void MouseLeave2(object sender, RoutedEventArgs e) 
{ 
    Combo2.IsDropDownOpen = false; 
} 
+1

這是由設計打破。我建議按照預期的方式使用控件。追蹤這將使你在調試時遇到麻煩,追逐事件和狀態,對於用戶來說,這將始終被破壞,因爲它不符合控制的正常/預期行爲。 –

回答

1

我的第一個想法是在你輸入按鈕的那一刻從MouseEnter2-事件退訂。在MouseLeave2-Event中,您必須再次訂閱MouseEnter2。也許這對你的作品

要從MouseEnter2-事件退訂,你必須:

button.MouseEnter -= MouseEnter2; 
+0

你能舉個例子嗎? – Dim

+0

其實,也許最好在下拉打開的事件中訂閱MouseLeave事件。 – David