我有一个ItemsControl的在Window列的其中一个包含一个简单的很窄的StackPanel,供应就像一个弹出这是一个目标在某些情况下显示。的ItemsControl不会显示在它弹出后重新渲染
在已经示出并且用户已经被通知有关的东西后,用户关闭通过按钮(绑定到该按钮的命令的手段本弹出只是设置视图模型到弹出的财产。 IsOpen绑定到false)。
的弹出关闭,但其图像保持在的ItemsControl印迹,直到它被滚动或另一个窗口重叠它。
如何重绘的ItemsControl的的弹出后已经关闭?
代码:
1)的ItemsControl
<ScrollViewer ...>
<ItemsControl x:Name="ux_List" ItemTemplate="{DynamicResource Lib_ItemTemplate}" ItemsSource="{Binding Path=TemplateInfos,Mode=OneWay}" AlternationCount="2" ... />
2)项目模板
<DataTemplate x:Key="Lib_ItemTemplate">
<Grid x:Name="grid">
...
<StackPanel Grid.Column="1">
<Popup IsOpen="{Binding Path=HasError,Mode=OneWay}">
<ContentPresenter Content="{Binding Path=ErrorContext, Mode=OneWay}"
,并有在上面的代码段的最后一行演示中关闭按钮:
<Button ... Command="{TemplateBinding CloseButtonCommand}" />
的命令被绑定到该按钮,像这样实现的:
private void OnCloseErrorMessageCommand()
{
HasError = false;
...
}
你能张贴你的意思吗?或者也许是一些代码?我认为弹出窗口会绘制在与UI图层不同的层上,因此重绘ItemsControl可能不会执行任何操作。 – Rachel 2012-01-31 14:55:18
我无法重现您的问题。当我关闭弹出窗口时,一切都很好地关闭。 你能告诉我们你的标记吗? 但是,这样的事情应该工作: <弹出关= “myPopup_Closed” ...... 私人无效myPopup_Closed(对象发件人,EventArgs的){ myItemsControl.InvalidateVisual(); } – SvenG 2012-01-31 15:06:56
我从来没有见过一个DataTemplate中的Popup,对我来说它看起来不是一个有效的方法,但我不确定。其他人说什么? – Clemens 2012-01-31 15:33:54