2014-12-31 5 views
1

У меня есть datagrid, который я пытаюсь размыть и исчезать в тексте при изменении данных строки и выполнении определенных критериев. У меня все работает, кроме добавления размытия текста в анимации и его фокусировки с анимацией (поскольку прозрачность текста также исчезает).WPF Анимировать текст DataGridCell BlurEffect с DataTrigger

Ошибка, которую я получаю в настоящее время, это «Не удается разрешить все ссылки свойств в пути свойств Effect.BlurEffect». Убедитесь, что применимые объекты поддерживают свойства. ». Если я удалю часть анимации, размытие будет работать так, как ожидалось - я думаю, мне просто нужно знать, как правильно ссылаться на эффект, чтобы я мог его анимировать.

Как это работает: У меня есть staticResource, установленный в моих столбцах, задает анимацию, когда критерии datatrigger удовлетворяются со значением в невидимом столбце (с именем: changed).

Я проработал около 4 часов поиска, не найдя никакой документации или даже каких-либо примеров этого с помощью datatrigger. Любая помощь была бы наиболее оценена. Ниже приведен пример моего XAML

<DataGrid x:Name="dgDisplay" AutoGenerateColumns="false" ColumnHeaderStyle="{StaticResource headersVisible}" AlternatingRowBackground="Lightblue" AlternationCount="2" GridLinesVisibility="None" > 
 
       <DataGrid.Resources> 
 
        <Style TargetType="DataGridCell" x:Key="cellHighlight"> 
 
         <Style.Triggers> 
 
          <DataTrigger 
 
           Binding="{Binding changed}" Value="S"> 
 
           <Setter Property="Effect"> 
 
            <Setter.Value> 
 
             <BlurEffect Radius="10" KernelType="Gaussian" x:Name="blur"/> 
 
            </Setter.Value> 
 
           </Setter> 
 
           <DataTrigger.EnterActions> 
 
            <BeginStoryboard> 
 
             <Storyboard x:Name="FadeS" > 
 
              <DoubleAnimation 
 
               Storyboard.TargetProperty="(TextBlock.Opacity)" 
 
               From="0.0" To="1.0" Duration="0:0:1" 
 
               AutoReverse="False" /> 
 
              <DoubleAnimation 
 
               Storyboard.TargetProperty="Effect.BlurEffect" 
 
               From="10" To="0" Duration="00:00:1" /> 
 
             </Storyboard> 
 
            </BeginStoryboard> 
 
           </DataTrigger.EnterActions> 
 
          </DataTrigger> 
 
         </Style.Triggers> 
 
        </Style> 
 
       </DataGrid.Resources> 
 
       <DataGrid.Columns> 
 
        <DataGridTextColumn CellStyle="{StaticResource cellHighlight}" Header="Col1" Binding="{Binding Col1}" FontWeight="Bold" /> 
 
        <DataGridTextColumn Header="Col2" CellStyle="{StaticResource cellHighlight}" Binding="{Binding Col2}" /> 
 
       </DataGrid.Columns> 
 
      </DataGrid>

+0

Я думал об этом немного и изменил целевое свойство BlurEffect.Radius - теперь я не сгенерирует ошибку , но размытие не анимируется. Я попробовал (TextBlock). (BlurEffect.Radius) и несколько других вариантов, чтобы получить ошибку. Ближе ... – xcr

ответ

1

Попробуйте это:

<DataGrid x:Name="dgDisplay" AutoGenerateColumns="false" ColumnHeaderStyle="{StaticResource headersVisible}" AlternatingRowBackground="Lightblue" AlternationCount="2" GridLinesVisibility="None" > 
     <DataGrid.Resources> 
      <Style TargetType="{x:Type DataGridCell}" x:Key="cellHighlight"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type DataGridCell}"> 
          <Border> 
           <Border.Effect> 
            <BlurEffect Radius="0" KernelType="Gaussian" x:Name="blurEffect"/> 
           </Border.Effect> 
           <ContentPresenter/> 
          </Border> 
          <ControlTemplate.Triggers> 
           <DataTrigger 
          Binding="{Binding changed}" Value="S"> 
            <DataTrigger.EnterActions> 
             <BeginStoryboard> 
              <Storyboard x:Name="FadeS" > 
               <DoubleAnimation 
              Storyboard.TargetProperty="(TextBlock.Opacity)" 
              From="0.0" To="1.0" Duration="0:0:1" 
              AutoReverse="False" /> 
               <DoubleAnimation Storyboard.TargetName="blurEffect" 
              Storyboard.TargetProperty="Radius" 
              From="10" To="0" Duration="00:00:1" /> 
              </Storyboard> 
             </BeginStoryboard> 
            </DataTrigger.EnterActions> 
           </DataTrigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </DataGrid.Resources> 
     <DataGrid.Columns> 
      <DataGridTextColumn CellStyle="{StaticResource cellHighlight}" Header="Col1" Binding="{Binding Col1}" FontWeight="Bold" /> 
      <DataGridTextColumn Header="Col2" CellStyle="{StaticResource cellHighlight}" Binding="{Binding Col2}" /> 
     </DataGrid.Columns> 
    </DataGrid> 
+0

Вау! Спасибо - это сработало отлично. ControlTemplate, по-видимому, позволяет вам использовать TargetName, которое было частью моей проблемы. Еще раз спасибо! – xcr

+0

Добро пожаловать .. @xcr .. –

Смежные вопросы