Почему привязанная команда TriggerEvent «Loaded» не работает для App.xaml - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь загрузить заставку при загрузке моего приложения.LoadSplashScreen - это команда делегата, которая проверяет, запущена ли уже другая программа, если нет, то показывает заставку.

Но для проверки свойства мне нужно вызвать команду при загрузке файла App.xaml.

Это показывает, что «триггеры не могут быть присоединены к элементам типа Application». И другие ошибки, которые, я думаю, связаны с первой ошибкой, в которой говорится, что привязка триггеров может быть только производными типами «DependencyObject».".

Вот код xaml:

<Application x:Class="FST.CWI.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:viewModel="clr-namespace:FST.CWI.Sources.ViewModel"
             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
             StartupUri="MainWindow.xaml"
             xmlns:interactivity="http://schemas.microsoft.com/expression/2010/interactivity">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Loaded">
                <i:InvokeCommandAction Command="{Binding LoadSplashScreen}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <Application.Resources>
        <viewModel:BaseViewModel x:Key="BaseVM" />
        <viewModel:AppViewModel x:Key="AppVM" />
        <viewModel:GeneralViewModel x:Key="GeneralVM" />
        <viewModel:SteeringViewModel x:Key="SteeringVM" />
        <viewModel:AdvancedViewModel x:Key="AdvancedVM" />
        <viewModel:SittingViewModel x:Key="SittingVM" />
    </Application.Resources>
</Application>

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Приложение не является объектом зависимости, поэтому не пытайтесь использовать то, что полагается на него.Потому что это просто не сработает.

Удалите загрузочный URL из app.xaml, который открывает главное окно.Вместо этого укажите на переопределение onstartup в вашем app.xaml.cs

<Application …
           Startup="OnStartup">

И, конечно, ваш код в app.xaml.cs

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);
    //  Your logic here


}

Поместите туда свою логикуи новое, покажите, какое бы окно вы ни выбрали.

Что будет выглядеть примерно так:

SplashScreen ss = null;
if ( your criteria goes here)
{
    ss = new SplashScreen("whatever.bmp");
    ss.Show();
}
MainWindow mw = new MainWindow();

if ( your criteria goes here )
{
    ss.Close();
}

mw.Show();    
0 голосов
/ 30 ноября 2018

Wpf имеет функцию экрана-заставки, может быть, вы можете использовать его:

https://docs.microsoft.com/en-us/dotnet/framework/wpf/app-development/how-to-add-a-splash-screen-to-a-wpf-application

Может отображать изображение, пока не появится ваш MainWIndow.

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