2013-01-07 63 views
2

我一直在尋找解決方案,但沒有發現任何可行的方法。TargetUpdated事件動畫DataGrid單元格背景

問題很簡單:

  • 數據網格(只讀)被綁定到對象(實施INotifyPropertyChanged的)
  • 當數據對象的某些特性改變,細胞背景應該動畫的集合(例如從紅到透明)

我使用樣式EventTrigger(TargetUpdated)啓動一個Storyboard試過,但它有副作用,第一填充DataGrid的當所有細胞的背景動畫,以及當它是滾動的或重新排序。

我知道還有其他幾個類似的問題,但我沒有看到一個工作解決方案。
有沒有人能夠實現這一目標?我非常希望不要有任何代碼隱藏,但如果有必要,我會忍受它...

編輯:
我注意到有一些混亂,至於我是什麼試圖實現:
假設一個單元格(它是數據對象的基礎屬性)具有值「A」。在某些時候,它變成「B」(例如從服務器更新)。此時背景應該「閃爍」(例如,從紅色到透明的1秒動畫)。在所有其他時候,背景應該是透明的。

回答

4

我終於在MS論壇上指出了正確的方向,解決方案是使用附加的行爲來註冊OnTargetUpdated處理程序並啓動s Storyboard。我早些時候嘗試過這種方法,但顯然只有在單元格的IsLoaded屬性爲true時才必須啓動Storyboard。這擺脫了我上面提到的副作用。

這是鏈接到forum post

+0

感謝您發佈其他Marin的解決方案,這也給我一個清晰的想法。我很感激 :) –

2

添加一個轉換器是這樣的:

namespace System.Converters 
{ 
//Converter for cell animation 
    public class flashConverter : IValueConverter 
    { 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     string cellvalue = value.ToString(); 
     return cellvalue = ("place the condition here"); 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return false; 
    } 
} 

} 在MainWindow.xaml.cs添加命名空間

xmlns:loc="clr-namespace:YourProjectName.Converters" 

在你的資源添加以下內容:

  <DataGrid.Resources> 
      <loc:flashConverter x:Key="SomeConverter"></loc:flashConverter> 
     </DataGrid.Resources> 

在您的DatagridTextColumn中添加以下內容:

<DataGridTextColumn Header="yourDatagridHeader" IsReadOnly="True" Binding="{Binding Path=yourDatagridHeader}"> 
      <DataGridTextColumn.ElementStyle> 
     <!--Style to implement the datagrid cell animation for yourDatagridcell--> 
      <Style TargetType="{x:Type TextBlock}"> 
      <Style.Triggers> 
      <DataTrigger Binding="{Binding yourDatagridHeader}" Value="Give your condition here"> 
      <!-#E6F85050 is the hexadecimal value for RED--> 
      <Setter Property="Background" Value="#E6F85050"/> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding yourDatagridHeader}" Value="Give your condition here"> 
      <Setter Property="Background" Value="give the hexadecimal value for transparent here "/> 
       </DataTrigger> 
      </Style.Triggers> 
      </Style> 
     </DataGridTextColumn.ElementStyle> 
     </DataGridTextColumn> 

希望這有助於!

+0

對不起,但我不明白這是如何工作的。你正在聲明一個Converter flashConverter,但它沒有在任何地方使用......我只能猜測你的意思是轉換器應該返回「正在運行」或「已停止」的值,但問題是何時從運行切換到已停止;這需要某種計時器... –

+0

我現在編輯..請看看我已經添加 「命名空間HMSystem.Converters」 之前我的flashconverter {}和我已經在我的XAML代碼中添加此名稱空間..內。首先嚐試編寫轉換器類,保存並將其添加到名稱空間,以便Intellisense知道它。 併爲「跑」和「停止」只是一個例子,你應該給你的病情有其觸發。 –

+0

你還沒有在任何地方使用轉換器......你真的試過這段代碼嗎?在任何情況下,除非源對象發生變化,否則不會調用轉換器,所以「停止」值永遠不會返回。我希望你能理解我原來的問題,它指出backgorund應該在數據CHANGE上動畫*,而不是數據的值。 –

相關問題