C# tabControl/tabitem刷新困难
我有一个WPF窗口,有一个maintabWindow和几个tabitems。 它通常工作正常,布局如下: 但当我之前添加以下窗口时: 结果是: 因此,问题与tabControl/tabItem刷新有关。 这是相当明显的,但更重要的是,如果我在选项卡项上移动窗口或通过鼠标,它们会一个接一个地刷新 我搜索并发现以下是一个解决方案: 所以我补充说:C# tabControl/tabitem刷新困难,c#,wpf,refresh,tabcontrol,C#,Wpf,Refresh,Tabcontrol,我有一个WPF窗口,有一个maintabWindow和几个tabitems。 它通常工作正常,布局如下: 但当我之前添加以下窗口时: 结果是: 因此,问题与tabControl/tabItem刷新有关。 这是相当明显的,但更重要的是,如果我在选项卡项上移动窗口或通过鼠标,它们会一个接一个地刷新 我搜索并发现以下是一个解决方案: 所以我补充说: this.MainTab.Refresh(); this.tabItem1.Refresh(); this.tabItem2.Refre
this.MainTab.Refresh();
this.tabItem1.Refresh();
this.tabItem2.Refresh();
this.tabItem3.Refresh();
this.tabItem4.Refresh();
this.tabItem5.Refresh();
但这并没有改变任何事情
谢谢你的帮助,好吧,最后它有一个很奇怪的行为。如果我这样做
for (int i = 0; i < tbcMain.Items.Count; i++)
{
tbcMain.SelectedIndex = i;
tbcMain.UpdateLayout();
}
没有。
因此,解决方案被置于睡眠状态,它再次起作用
for (int i = 0; i < tbcMain.Items.Count; i++)
{
tbcMain.SelectedIndex = i;
tbcMain.UpdateLayout();
}
System.Threading.Thread.Sleep(250);
tbcMain.SelectedIndex = 0;
for(int i=0;i
但这一点也不优雅。如果有更好的解决方案,请告诉我。
顺便说一句,添加tbcMain.SelectedIndex=0;在主窗口的已加载事件上没有任何用处。您应该能够首先设置所选的索引,而不必将其包含在循环中:
tbcMain.SelectedIndex = 0;
MainTab.UpdateLayout();
for (int i = 0; i < tbcMain.Items.Count; i++)
{
TabItem tbi = (TabItem)this.FindControl("tabItem"+i);
tbi.UpdateLayout();
}
然后,根据您的回答,您应该能够在每个选项卡项上执行.UpdateLayout()
:
MainTab.UpdateLayout();
tabItem1.UpdateLayout();
tabItem2.UpdateLayout();
tabItem3.UpdateLayout();
tabItem4.UpdateLayout();
tabItem5.UpdateLayout();
或者,您应该能够在循环中执行以下操作:
tbcMain.SelectedIndex = 0;
MainTab.UpdateLayout();
for (int i = 0; i < tbcMain.Items.Count; i++)
{
TabItem tbi = (TabItem)this.FindControl("tabItem"+i);
tbi.UpdateLayout();
}
关于为什么需要将其发送到调度程序
,在一个单独的线程上有一篇文章/评论:
Dispatcher.BeginInvoke((Action)(() => this.tbcMain.SelectedIndex = 0));
不过,不幸的是,我遇到了一个类似的问题,我试图刷新子选项卡上的列表视图。无论是
.UpdateLayout()
,还是.InvalidateVisual()
(正如我在上所看到的)都不起作用。我只需要在主页上使用的按钮事件中重新绑定我的网格,以便在单击选项卡时手动刷新。我在选项卡上添加了一个x:Name
属性,这样我就可以使用“点”语法调用它,并且它公开了ListView。我只是简单地将结果的DataTable添加回该ListView的DataContext。您可以发布一些XAML吗?您可以尝试这样的方法:@Xcalibur37不起作用。但你提出的另一个解决方案可能不起作用。。。。作品所以无论如何谢谢你的帮助!!!!如果需要,您可以将其作为解决方案提出。编辑评论时被阻止。这个很好用。。。。对于(var i=0;imainTab.Update()
帮了我的忙。不要添加tbcMain.SelectedIndex=i代码>在循环中。不需要。您可以直接执行tabItem1.UpdateLayout()
,tabItem2.UpdateLayout()等操作。如果要执行循环,只需将i
附加到选项卡项名称。然后,您可以在末尾设置您的。如您所做的那样,选择索引=0
,或者先设置它。