Невозможно выбрать элемент из ListBox при создании - PullRequest
1 голос
/ 20 июля 2011

Так что я использую C # с WPF. У меня есть список, в котором я генерирую 100 музыкальных станций, но я хочу выбрать одну из них во время генерации, но не могу, только когда они завершают генерацию.

Я использую этот код для центрирования выбранного элемента (взято из MSDN blog ):

FrameworkElement container = listRadioItems.ItemContainerGenerator.ContainerFromItem(fixedItem) as FrameworkElement;

            if (null != container)
            {
                if (ScrollViewer.GetCanContentScroll(listBox))
                {
                    IScrollInfo scrollInfo = VisualTreeHelper.GetParent(container) as IScrollInfo;
                    if (null != scrollInfo)
                    {
                        StackPanel stackPanel = scrollInfo as StackPanel;
                        VirtualizingStackPanel virtualizingStackpanel = scrollInfo as VirtualizingStackPanel;

                        int index = listBox.ItemContainerGenerator.IndexFromContainer(container);

                        if (((null != stackPanel) && (Orientation.Horizontal == stackPanel.Orientation)) || ((null != virtualizingStackpanel) && (Orientation.Horizontal == virtualizingStackpanel.Orientation)))
                        {
                            scrollInfo.SetHorizontalOffset(index - Math.Floor(scrollInfo.ViewportWidth / 2));
                        }
                        else
                        {
                            scrollInfo.SetVerticalOffset(index - Math.Floor(scrollInfo.ViewportHeight / 2));
                        }
                    }
                }

                else
                {
                    Rect rect = new Rect(new Point(), container.RenderSize);

                    FrameworkElement constrainingParent = container;
                    do
                    {
                        constrainingParent = VisualTreeHelper.GetParent(constrainingParent) as FrameworkElement;
                    } while ((null != constrainingParent) && (listBox != constrainingParent) && !(constrainingParent is ScrollContentPresenter));

                    if (null != constrainingParent)
                    {
                        rect.Inflate(Math.Max((constrainingParent.ActualWidth - rect.Width) / 2, 0), Math.Max((constrainingParent.ActualHeight - rect.Height) / 2, 0));
                    }

                    container.BringIntoView(rect);
                }
            }

Используя некоторые другие коды вместо этого, я могу выбрать элементы, все еще трудно (я нажимаю на элемент и жду несколько секунд, пока он не будет нажат, не тот, который я выбрал, а какой-то другой из этой позиции, надеюсь чтобы прояснилось).

То есть что-то не так с этим кодом, который мешает мне выбрать элемент до того, как он достигнет 100? Или есть способ программирования, чтобы исправить мою проблему?

Надеюсь, вы понимаете мою проблему. Спасибо.

1 Ответ

1 голос
/ 20 июля 2011

Так что с этим кодом что-то не так, что мешает мне выбрать предмет, прежде чем он достигнет 100? Или есть способ программирования, чтобы исправить мои проблема?

Причина, по которой вы не можете выбрать элемент, заключается в том, что метод, используемый вами для добавления элементов в список, блокирует это поведение. По этой причине другой метод позволяет вам выбрать элемент (ожидание зависит от поведения блокировки), но выбранный элемент - это тот же элемент, который вы выбрали при создании списка. Другими словами, предмет находился в слоте 50, но предмет, который вам действительно нужен, был перемещен в слот 60.

Поскольку вы не указали, как добавляете элементы в ListBox, это лучшее, что я могу сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...