我們的WPF應用程序有一個包含各種控件的ScrollViewer。當打開此ScrollViewer的組合框被打開,然後用戶使用鼠標滾輪滾動ScrollViewer時,組合框控件移動,但下拉列表保持在相同的位置,這看起來很尷尬。組合框移動時處理組合框下拉
是否有一種簡單的方法可以使組合框關閉,或者當ScrollViewer滾動並更改組合框位置時更新下拉列表的位置?
我知道我可以處理鼠標滾輪事件,但我有許多這樣的情況與ScrollViewer中包含的組合框,並希望聽到更好的解決方案。
我們的WPF應用程序有一個包含各種控件的ScrollViewer。當打開此ScrollViewer的組合框被打開,然後用戶使用鼠標滾輪滾動ScrollViewer時,組合框控件移動,但下拉列表保持在相同的位置,這看起來很尷尬。組合框移動時處理組合框下拉
是否有一種簡單的方法可以使組合框關閉,或者當ScrollViewer滾動並更改組合框位置時更新下拉列表的位置?
我知道我可以處理鼠標滾輪事件,但我有許多這樣的情況與ScrollViewer中包含的組合框,並希望聽到更好的解決方案。
我通過增加處理得App.xaml.cs中的以下代碼:
EventManager.RegisterClassHandler(typeof(ComboBox), UIElement.GotFocusEvent, new RoutedEventHandler(SetSelectedComboBox));
EventManager.RegisterClassHandler(typeof(ScrollViewer), UIElement.MouseWheelEvent, new MouseWheelEventHandler(OnMouseWheelEvent));
private static WeakReference<ComboBox> _selectedComboBox;
private static void SetSelectedComboBox(object sender, RoutedEventArgs e)
{
_selectedComboBox = new WeakReference<ComboBox>(sender as ComboBox);
}
// Close dropdown when scrolling with the mouse wheel - QM001866525
private static void OnMouseWheelEvent(object sender, MouseWheelEventArgs e)
{
if (_selectedComboBox == null || Environment.GetEnvironmentVariable("DONT_CLOSE_COMBO_ON_MOUSE_WHEEL") == "1")
{
return;
}
ComboBox combo;
if (_selectedComboBox.TryGetTarget(out combo) && combo.IsDropDownOpen)
{
combo.IsDropDownOpen = false;
}
}
,你可以處理ScrollChanged
事件ScollViewer
和強制ComboBox
關閉下拉菜單: 的XAML
<ScrollViewer VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ScrollChanged="ScrollViewer_OnScrollChanged">
<Grid Height="700">
<ComboBox x:Name="comboBox" VerticalAlignment="Center" HorizontalAlignment="Center">
<ComboBoxItem Content="Elt One"/>
<ComboBoxItem Content="Elt Two"/>
<ComboBoxItem Content="Elt Three"/>
</ComboBox>
</Grid>
</ScrollViewer>
,並在後面的代碼:
private void ScrollViewer_OnScrollChanged(object sender, ScrollChangedEventArgs e)
{
comboBox.IsDropDownOpen = false;
}
謝謝。正如我寫的,我知道我可以做到這一點,但我想要一個更通用的解決方案,因爲我們的應用中有很多cmobobox和許多滾動查看器。 – splintor