Так что я использую 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? Или есть способ программирования, чтобы исправить мою проблему?
Надеюсь, вы понимаете мою проблему. Спасибо.