打开

时间:2016-03-10 10:29:09

标签: c# combobox win-universal-app

我在c#XAML中有一个ComboBox,当没有选择任何内容并显示PlaceHolderText时,我点击它打开,正常的行为就是在中间打开它。

我希望下拉列表在顶部打开。假设我有一个ComboBox并用 1-100 填充它,那么我希望它从 1 开始显示。如果下拉列表中显示七个项目,则应显示数字 1-7 。正常行为将显示数字 47-53

旧的解决方法是使用ListView,但我不想要这个。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:13)

这个解决方法怎么样?

using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace StackOverFlowSampleApp
{
    public class ExtendedComboBox : ComboBox
    {
        private ScrollViewer _scrollViewer;

        public ExtendedComboBox()
        {
            DefaultStyleKey = typeof(ComboBox);
        }

        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();
            _scrollViewer = GetTemplateChild("ScrollViewer") as ScrollViewer;
            if (_scrollViewer != null)
            {
                _scrollViewer.Loaded += OnScrollViewerLoaded;
            }
        }

        private void OnScrollViewerLoaded(object sender, RoutedEventArgs e)
        {
            _scrollViewer.Loaded -= OnScrollViewerLoaded;
            _scrollViewer.ChangeView(null, 0, null);
        }
    }
}

以前如何运作:

enter image description here

解决方法后的工作原理:

enter image description here