Почему не срабатывает анимация у DataGridRow?
Пытаюсь сделать анимацию DataGriwRow для состояния EsEnabled = "False" некоторых строк при определённых условиях. Определил отдельную булевую переменную для этого дела, если в XAML указываю <DataTrigger Binding="{Binding IsWinnerAccess}" Value="false">, то мигают все строки, если true, то ни одна не мигает. О_О При этом стиль второй анимации работает исправно.
XAML:
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="IsEnabled" Value="{Binding IsAccess}"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="Background" Value="Transparent"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsWinnerAccess}" Value="false">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Duration="0:0:0.5"
RepeatBehavior="0:0:5.5"
FillBehavior="Stop"
To="LightCoral"
Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
<DataTrigger Binding="{Binding IsWinner}" Value="true">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ThicknessAnimation Duration="0:0:1"
To="3 From="3" To="0" BeginTime="0:0:5.5"
Storyboard.TargetProperty="BorderThickness"/>
<ColorAnimation Duration="0:0:1"
To="Red"
AutoReverse="True"
RepeatBehavior="0:0:5.5"
FillBehavior="Stop"
Storyboard.TargetProperty="BorderBrush.(SolidColorBrush.Color)"/>
<ThicknessAnimation Duration="0:0:1"
From="3" To="0"
BeginTime="0:0:5.5"
Storyboard.TargetProperty="BorderThickness"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
Свойства:
private bool isWinnerAcces;
public bool IsWinnerAccess
{
get => isWinnerAcces;
set
{
if (isWinnerAcces == value) return;
isWinnerAcces = value;
OnPropertyChanged();
}
}
private bool isWinner;
public bool IsWinner
{
get => isWinner;
set
{
if (isWinner == value) return;
isWinner = value;
OnPropertyChanged();
}
}
private bool isAccess;
public bool IsAccess
{
get => isAccess;
set
{
if (isAccess == value) return;
isAccess = value;
OnPropertyChanged();
}
}
Ответы (1 шт):
Автор решения: Genas
→ Ссылка
Оказалось нужно было определить состояние триггера, когда он не срабатывает при помощи <DataTrigger.ExitActions> и убрать лишнюю переменную.
XAML:
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="IsEnabled" Value="{Binding IsAccess}"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="Background" Value="Transparent"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsAccess}" Value="false">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Duration="0:0:0.2"
RepeatBehavior="0:0:2"
BeginTime="0:0:5.5"
To="LightCoral"
Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation From="Transparent"
Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
<DataTrigger Binding="{Binding IsWinner}" Value="true">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ThicknessAnimation Duration="0:0:1"
To="3"
Storyboard.TargetProperty="BorderThickness"/>
<ColorAnimation Duration="0:0:1"
To="Red"
AutoReverse="True"
RepeatBehavior="0:0:5.5"
FillBehavior="Stop"
Storyboard.TargetProperty="BorderBrush.(SolidColorBrush.Color)"/>
<ThicknessAnimation Duration="0:0:1"
From="3" To="0"
BeginTime="0:0:5.5"
Storyboard.TargetProperty="BorderThickness"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
Код позади:
private bool isWinner;
public bool IsWinner
{
get => isWinner;
set
{
if (isWinner == value) return;
isWinner = value;
OnPropertyChanged();
}
}
private bool isAccess = true;
public bool IsAccess
{
get => isAccess;
set
{
if (isAccess == value) return;
isAccess = value;
OnPropertyChanged();
}
}