所以我在WPF中使用C#。我有一个列表框,我生成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到100之前选择一个项目?还是有一种编程方式来解决我的问题?
希望你们明白我的问题。感谢。
答案 0 :(得分:1)
因此,此代码出现问题导致我无法选择 项目达到100之前?或者有一种编程方式来修复我的问题 问题?
您无法选择项目的原因是您使用将项目添加到列表的方法阻止了该行为。这是您的其他方法允许您选择项目(等待来自阻止行为)的原因,但所选项目与您在创建列表时选择的项目相同。换句话说,该项目位于第50个插槽中,但您真正想要的项目已移至第60个插槽。
由于您没有发布如何向ListBox添加项目,这是我能做的最好的事情。