我正在编写一个WPF应用程序,我会跟踪一些项目。总共有30多个项目,可以跟踪,但没有一个必须。这反映在设置部分填充的List I中(下面的TrackedItems对象)。
我总共使用了10个Stackpanel来显示这些项目。我为他们制作了一个集合,以便于访问(StackedpanelsForTrackedItems)
用户可以选择将显示的面板减少到3,5或10(Preferences.NumberNodesDisplayed包含该数字)以减少混乱。因此,无论跟踪了多少项,都不应该有比此选项允许的更多可见SP。
此外,应用程序应识别当前跟踪的项目数量是否少于当前选定的项目。
例如,如果我目前只跟踪6个项目,但选项设置为10,则它应该只显示前6个SP。
我提出了这个逻辑:
Collection<UIElement> StackpanelsForTrackedItems = new Collection<UIElement>();
foreach (UIElement element in StackpanelItemParent.Children)
{
if (element is StackPanel)
{
StackPanel sp = (StackPanel)element;
StackpanelsForTrackedItems.Add(sp);
}
}
int i = 0;
foreach (UIElement item in StackpanelsForTrackedItems)
{
if ((i < TrackedItems.Count) && (i < Preferences.NumberNodesDisplayed))
item.Visibility = Visibility.Visible;
else
item.Visibility = Visibility.Collapsed;
i++;
}
现在如果我选择让我们说6个项目(这意味着TrackedItems.Count = 6)并且我选择最多显示10个项目(这意味着Preferences.NumberNodesDisplayed = 10)它仍然应该设置的可见性 StackpanelsForTrackedItems [6]到StackpanelsForTrackedItems [9]在&#39;折叠&#39;,但它没有,它总是显示每10个SP。
如果(i&lt; TrackedItems.Count)已经为假,if-statement如何成为真?
我认为我的逻辑存在一个重大缺陷,但我无法找到它。
请帮助:)
编辑:按要求
<StackPanel x:Name="StackpanelItemParent" Orientation="Vertical">
<StackPanel x:Name="StackpanelItem1" Orientation="Horizontal">
// stuff here...
</StackPanel>
<StackPanel x:Name="StackpanelItem2" Orientation="Horizontal">
//stuff here...
</StackPanel>
<StackPanel x:Name="StackpanelItem3" Orientation="Horizontal">
// stuff here...
</StackPanel>
<StackPanel x:Name="StackpanelItem4" Orientation="Horizontal">
// stuff here...
</StackPanel>
<StackPanel x:Name="StackpanelItem5" Orientation="Horizontal">
// stuff here...
</StackPanel>
//
//
//
<StackPanel x:Name="StackpanelItem10" Orientation="Horizontal">
// stuff here...
</StackPanel>
</StackPanel>
当我调试
时,集合会正确填充StackpanelsForTrackedItems [0]将是StackpanelItem1
StackpanelsForTrackedItems [1]将是StackpanelItem2
StackpanelsForTrackedItems [2]将是StackpanelItem3等。
我看到没有错误: - /
EDIT2: 我发现了这个错误,我猜得太愚蠢了。
当我在没有断点的情况下运行应用程序并将项目更改为跟踪时,出现上述行为
所以我继续设置断点来追踪所有变量,这阻止了我的应用程序执行方法,TrackedItems对象再次被填充...
一个简单的TrackedItems.Clear()修复了所有内容,显然一旦稍后再次调用该方法,该列表中将有12个项目而不再是6个
我觉得现在问这个问题真的很尴尬:( 至少我设法自己跟踪它,我从评论中学到了一两件事,所以它不是完全浪费我猜
感谢大家尝试提供帮助,非常感谢!
答案 0 :(得分:0)
我已将逻辑模拟到布尔列表中。 True表示显示,而false表示隐藏。
以下用户选择了10个要跟踪的项目,但仅存在6个项目:
var StackpanelsForTrackedItems = Enumerable.Range(0, 10)
.Select (e => true)
.ToList();
int tracked = 6;
int max = 10;
StackpanelsForTrackedItems.Select ((sp, index) => sp = (index < max) && (index < tracked));
结果:
对于
int tracked = 6;
int max = 3;
结果
对于WPF可见性更改
.Select ((sp, index) => sp.Visibility =
((index < max) && (index < tracked)) ? Visibility.Visible
: Visibility.Collapsed);