Diskuze: WPF animace blokující přístup k vlastnosti
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Nevím, co přesně, co je účelem té animace, ale šlo by to i tak, že animuješ barvu pozadí gridu z nějaké barvy do transparentní barvy, po skončení animace nastavíš zpět původní barvu:
public partial class MainWindow : Window
{
ColorAnimation ca = new ColorAnimation(Color.FromRgb(255, 0, 0), Colors.Transparent, TimeSpan.FromSeconds(2));
DispatcherTimer timer = new DispatcherTimer() { Interval = TimeSpan.FromSeconds(2) };
SolidColorBrush brush;
public MainWindow()
{
InitializeComponent();
}
private void MainGrid_Loaded(object sender, RoutedEventArgs e)
{
brush = new SolidColorBrush(Color.FromRgb(255, 0, 0));
MainGrid.Background = brush;
brush.BeginAnimation(SolidColorBrush.ColorProperty, ca);
timer.Tick += Timer_Tick;
timer.Start();
}
private void Timer_Tick(object sender, EventArgs e)
{
timer.Stop();
brush.BeginAnimation(SolidColorBrush.ColorProperty, null);
brush.Color = Color.FromRgb(255, 0, 0);
}
}
Pokud jsem tvůj problém nepochopil správně, omlouvám se...
Obávám se, že to bohužel není to, co potřebuji.
Mám totiž dva navzájem se překrývající gridy, mezi kterými chci plynule
(pomocí animace) přecházet. Jsou na nich elementy, takže nemůžu použít
background, a jelikož nechci, aby na ně po konci aplikace šlo klikat či
jinak s nimi interagovat, nestačí mi ani samotná opacity, ale na konci
animace musím změnit Visibility na Hidden nebo Collapsed.
(Nespíš bych na to mohl vytvořit samostatné vlákno, které by po dobu animace bylo uspané, a potom by viditelnost pomocí Invoku přepnulo, ale to nezní jako zrovna elegantní řešení ...)
A co tedy tohle:
public partial class MainWindow : Window
{
DoubleAnimation da = new DoubleAnimation(1, 0, TimeSpan.FromSeconds(2));
DispatcherTimer timer = new DispatcherTimer() { Interval = TimeSpan.FromSeconds(2) };
SolidColorBrush brush;
public MainWindow()
{
InitializeComponent();
}
private void MainGrid_Loaded(object sender, RoutedEventArgs e)
{
MainGrid.BeginAnimation(Grid.OpacityProperty, da);
timer.Tick += Timer_Tick;
timer.Start();
}
private void Timer_Tick(object sender, EventArgs e)
{
timer.Stop();
MainGrid.BeginAnimation(Grid.OpacityProperty, null);
MainGrid.Opacity = 1;
}
}
Tu změnu viditelnosti jsem stále nepochopil, ale na konci animace v rámci Timer_Tick si nastav co chceš.
Tu změnu viditelnost potřebuji, protože i když je opacity nastavená na 0, na elementy jde klikat, i když nejsou viditelné. Nicméně můj problém to řeší, netušil jsem, že takhle jde vypnout animaci a uvolnit tak tu vlastnost:
MainGrid.BeginAnimation(Grid.VisibilityProperty, null);
Díky za pomoc.
Zobrazeno 5 zpráv z 5.