2013-03-09 289 views
0

我有一个StackPanel阴影样式。内容绑定到ObservableCollection并且每个项目都呈现为图像。当我从集合中删除最后一项时,即使图像不再存在,阴影仍然存在。这只发生在最后一个项目上。徘徊WPF阴影

发生了什么事?我如何确保阴影也被删除?

 <Style TargetType="StackPanel" x:Key="ShadowedStackPanel"> 
      <Setter Property="BitmapEffect"> 
       <Setter.Value> 
        <DropShadowBitmapEffect Color="Black" Direction="50" ShadowDepth="5" Opacity=".65" Softness="1"/> 
       </Setter.Value> 
      </Setter> 
     </Style> 


    <ItemsControl x:Name="TilesControl"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Horizontal" Style="{StaticResource ShadowedStackPanel}" /> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Image Source="{Binding Path=ImageSource}"/> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 

代码隐藏基本上是:

public ObservableCollection<TileViewModel> Hand = new ObservableCollection<TileViewModel>(); 

TilesControl.ItemsSource = Hand; 

// populate the collection here 

var last = Hand.Last(); 

Hand.Remove(last); 

这留下了挥之不去的阴影效果的影响。

rendering error

如果我在集合中删除任何其他较早的项目,它重绘一切正常。这只会发生,如果我删除最后一个项目。

如果我调整窗口大小,它会重新绘制并固定......但是无论什么原因,如果我不这样做,它会留下一片挥之不去的阴影。

我该如何强制重绘以使阴影消失?或者首先避免这个问题?

回答

0

你可以删除

TilesControl.Items.Refresh(); 
+0

这奏效了,感谢后使用的代码。我试图让控制本身刷新,并没有工作,但调用.Items.Refresh()很好。 – 2013-03-09 21:29:22

+0

是的。但是,如果我使用Button控件来代替Image,TilesControl可以很好地运行而不会产生任何技巧我不知道其他方法来解决你的控制与图像。 – 2013-03-09 21:34:02