Приложение WPF, использующее MVVM Toolkit, не будет компилироваться с помощью StartupEventHandler - PullRequest
3 голосов
/ 16 декабря 2010

У меня есть приложение WPF, которое не компилируется, когда я пытаюсь добавить какой-либо обработчик событий в класс App.

Ниже приведен весь код и исключение, которое я получаю. Приложение использует инструментарий MVVM - так что это может быть фактором.

Если бы кто-то мог сказать мне, что я могу упустить или сделать неправильно, это было бы очень признательно. <Ч />

Код App.xaml:

<Application x:Class="MyClient.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:vm="clr-namespace:Sample.ViewModel"
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         mc:Ignorable="d" Startup="Application_Startup">

<Application.Resources>
    <!--Global View Model Locator-->
    <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
    <!-- Resources scoped at the Application level should be defined here. -->
    <Style x:Key="TextBlockStyleFooter" TargetType="TextBlock">
        <Setter Property="HorizontalAlignment" Value="Center"/>
        <Setter Property="VerticalAlignment" Value="Center"/>
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="Margin" Value="1"/>
    </Style>
    <Style x:Key="TextBlockStyleClock" TargetType="TextBlock">
        <Setter Property="FontFamily" Value="Arial"/>
        <Setter Property="Foreground" Value="White"/>
        <!--<Setter Property="Margin" Value="0, -1,"/>-->
        <Setter Property="TextAlignment" Value="Center"/>
    </Style>
    <Style x:Key="BorderStyle1" TargetType="Border">
    </Style>
</Application.Resources>

App.xaml.cs Код:

using System;
using System.Windows;
using System.Windows.Threading;
using GalaSoft.MvvmLight.Threading;

namespace Sample
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        static App()
        {
            DispatcherHelper.Initialize();
        }

        private void Application_Startup(object sender, StartupEventArgs e)
        {

        }
    }
}

Когда я пытаюсь скомпилировать это, я получаю следующее исключение:

Error   1   'MyClient.App' does not contain a definition for 'Application_Startup' and no extension method 'Application_Startup' accepting a first argument of type 'EdgePokerClient.App' could be found (are you missing a using directive or an assembly reference?)  C:\projects.git\MyClient\src\MyClient\App.xaml  7   73  MyClient

Ответы [ 2 ]

3 голосов
/ 16 декабря 2010

Проблема в том, что ваш XAML ссылается на MyClient.App, тогда как ваш файл с выделенным кодом имеет частичный класс в пространстве имен Sample.Для компилятора это два отдельных класса.Таким образом, обработчик событий, который вы определили в одном классе (Sample.App), отсутствует в сгенерированном классе MyClient.App.

Вам просто нужно исправить пространство имен в вашем коде позади файла или x: Атрибут имени в файле XAML.

Я бы также был осторожен со статическим конструктором в App.Я не уверен, добавит ли генератор кода открытый конструктор без параметров или нет, но если это не так, наличие только статического конструктора будет фактически означать, что приложение не может быть создано.

0 голосов
/ 24 апреля 2011

Я хотел бы опубликовать этот комментарий для других людей, получающих такую ​​же ошибку, как и я. У меня была та же самая ошибка, однако мое пространство имен x: class не отличалось от кода позади пространства имен. В некоторых руководствах говорится, что после того, как вы поместите Startup = "Application_Startup" в свой XAML, ваш код должен обновляться автоматически. это не привело меня к этой ошибке.

My Fix - обновить код с

private void Application_Startup(object sender, StartupEventArgs e){}

перед добавлением

Startup="Application_Startup"

к xaml. надеюсь, это кому-нибудь пригодится.

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