Выцветание окна приводит к быстрой белой вспышке содержимого окна до появления - PullRequest
2 голосов
/ 09 февраля 2012

Я хочу, чтобы окно WPF исчезало при открытии. Я установил следующий триггер для загрузки окна:

<Window.Triggers>
    <EventTrigger RoutedEvent="Window.Loaded">
        <BeginStoryboard>
            <Storyboard Name="FormFade">
                <DoubleAnimation  Name="FormFadeAnimation"
                                        Storyboard.TargetName="Window"
                                        Storyboard.TargetProperty="(Window.Opacity)"
                                        From="0.0" To="1.0" Duration="0:0:5"
                                        AutoReverse="False" RepeatBehavior="1x"
                                     />
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</Window.Triggers>

Проблема заключается в том, что при первой загрузке окна все содержимое отображается белым цветом, а затем исчезает, а затем содержимое окна исчезает, как и ожидалось. Как я могу избавиться от белой вспышки, которая происходит в начале? Я даже установил фон окна черным, но он все еще мигает белым.

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

Я полагаю, что проблема вызвана обработкой в ​​вашем обработчике Window.Loaded. Анимация не будет работать, пока ваш обработчик Window.Loaded не завершит работу. Я смог воссоздать вашу проблему, выполнив следующее:

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
        }

        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            Thread.Sleep(1000);
        }
    }
}

Экран будет белым в течение 1000 мс, потому что анимация не будет работать, пока не закончится сон. Если вы уберете вызов Thread.Sleep (), результат будет таким, как вы ожидаете. Я предполагаю, что вы выполняете довольно много работы в своем обработчике Loaded, и анимация задерживается.

Кстати, вот MainWindow.xaml, почти такой же, как у вас:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" x:Name="Window">
    <Window.Triggers>
        <EventTrigger RoutedEvent="Window.Loaded">
            <BeginStoryboard>
                <Storyboard Name="FormFade">
                    <DoubleAnimation  Name="FormFadeAnimation"
                                        Storyboard.TargetName="Window"
                                        Storyboard.TargetProperty="(Window.Opacity)"
                                        From="0.0" To="1.0" Duration="0:0:5"
                                        AutoReverse="False" RepeatBehavior="1x"
                                     />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Window.Triggers>
    <Grid>
        <TextBlock>asdf</TextBlock>
    </Grid>
</Window>
0 голосов
/ 09 февраля 2012

Попробуйте установить для Window.Opacity значение 0 в теге <Window>.

РЕДАКТИРОВАТЬ: @ H.B абсолютно прав. Окно также должно иметь AllowsTransparency=true, и для этого хром окна должен быть отключен (WindowStyle=None). Я воспроизвел вашу проблему, затем сделал это, чтобы она работала так, как вы хотите:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" 
        Opacity="0" AllowsTransparency="True" WindowStyle="None">
    <Window.Triggers>
        <EventTrigger RoutedEvent="Window.Loaded">
            <BeginStoryboard>
                <Storyboard Name="FormFade">
                    <DoubleAnimation  Name="FormFadeAnimation"
                                        Storyboard.TargetProperty="(Window.Opacity)"
                                        From="0.0" To="1.0" Duration="0:0:5"
                                        AutoReverse="False" RepeatBehavior="1x"
                                     />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Window.Triggers>
    <Grid>

    </Grid>
</Window>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...