Файл ресурсов WPF, прикрепленный к файлу стиля: Ошибка - & gt; Имя «InitializeComponent» не существует в текущем контексте [duplicate]

Чтобы определить, почему код PHP не работает в коде JavaScript , нам нужно понять, что такое клиентский и серверный язык и как они работают.

Серверные языки (PHP и т. д.) : они извлекают записи из баз данных, поддерживают состояние через HTTP-соединение без состояния и выполняют много вещи, требующие безопасности. Они находятся на сервере, эти программы никогда не имеют своего исходного кода для пользователя

Image from wikipedia_http://en.wikipedia.org/wiki/File:Scheme_dynamic_page_en.svg [/g16] image attr

Хотя с другой стороны Клиентский язык на стороне клиента (например, JavaScript) находится в браузере и запускается в браузере, Сценарии на стороне клиента обычно относятся к классу компьютерных программ в Интернете, которые выполняются на стороне клиента, в веб-браузере пользователя, а не на стороне сервера .

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

Итак, когда вы делаете запрос HTTP на сервере, чем сервер, сначала внимательно читает файл PHP, чтобы узнать, есть ли какие-либо задачи, которые необходимо выполнить, и отправлять ответ на клиентскую сторону и снова, как @deceze сказал * Как только PHP закончил вывод ответа, сценарий заканчивается, и на сервере ничего не произойдет, пока не появится новый запрос HTTP . *

Graphical representation [/g17]

Источник изображения

Итак, что мне делать, если мне нужно вызвать PHP? Это зависит от того, как вам это нужно: либо перезагружая страницу, либо используя вызов AJAX.

  1. Вы можете выполнить перезагрузку страницы и отправить запрос HTTP
  2. вы можете сделать вызов AJAX с помощью JavaScript, и это не требует перезагрузки страницы

Хорошо Чтение:

  1. Википедия:
  2. Википедия: скрипты на стороне клиента
  3. Мадара Учиха: разница между клиентской стороной и программированием на стороне сервера

127
задан Crippeoblade 18 September 2008 в 13:31
поделиться

4 ответа

Я думаю, что вы спрашиваете, хотите ли вы создать код для файла ResourceDictionary. Вы можете это сделать полностью! Фактически, вы делаете это так же, как и для Window:

Скажите, что у вас есть ResourceDictionary, называемый MyResourceDictionary. В файле MyResourceDictionary.xaml поместите атрибут x: Class в корневой элемент следующим образом:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    x:Class="MyCompany.MyProject.MyResourceDictionary"
                    x:ClassModifier="public">

Затем создайте код за файлом MyResourceDictionary.xaml.cs со следующим объявлением:

namespace MyCompany.MyProject
{
    partial class MyResourceDictionary : ResourceDictionary
    { 
       public MyResourceDictionary()
       {
          InitializeComponent();
       }     
       ... // event handlers ahead..
    }
}

И все готово.

== Обновление для приложений Windows 10 ==

И на всякий случай, когда вы играете с UWP есть еще одна вещь, о которой нужно знать:

<Application x:Class="SampleProject.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:rd="using:MyCompany.MyProject">
<!-- no need in x:ClassModifier="public" in the header above -->

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>

                <!-- This will NOT work -->
                <!-- <ResourceDictionary Source="/MyResourceDictionary.xaml" />-->

                <!-- Create instance of your custom dictionary instead of the above source reference -->
                <rd:MyResourceDictionary />

            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

</Application>
189
ответ дан Sevenate 26 August 2018 в 00:51
поделиться
  • 1
    В качестве дополнения к ответе ageektrapped: убедитесь, что вы поместили полное имя своего класса codebehind в атрибут x: Class. x:Class="MyCompany.MyProject.MySubFolder1.MyResourceDictionary" В противном случае, если вы просто нажмете x: Class = & quot; MyResourceDictionary & quot ;, то анализатор xaml не найдет ваш класс. – viggity 11 February 2009 в 17:06
  • 2
    Убедитесь, что вы предоставили конструктор по умолчанию в частичном классе codebehind и убедитесь, что он вызывает InitializeComponent (). (В моем случае я использовал MEF для экспорта словаря ресурсов.) – Scott Whitlock 10 May 2009 в 01:50
  • 3
    Обновлен фрагмент кода для продолжения комментария. Я чувствовал, что это необходимо для завершения ответа; распространенная ошибка. Я сделал это сейчас :) Верните, если вам это не нравится. Спасибо за ответ. – Gishu 19 May 2010 в 11:34
  • 4
    Обратите внимание, что (по крайней мере, в wp8.1) это уже недействительно, и вам нужно будет создать настраиваемый пользовательский контроль, чтобы ссылки на ресурсы – Jared 8 June 2014 в 02:00
  • 5
    Вам также нужно будет установить действие сборки в файле XAML ResourceDictionary на страницу «quot», иначе вызов InitializeComponent () не будет компилироваться. (Файлы ResourceDictionary XAML обычно устанавливаются как «Ресурс» по умолчанию.) – user1454265 23 February 2015 в 19:56

XAML предназначен для построения графов объектов, не содержащих код. Шаблон данных используется для указания того, как настраиваемый пользовательский объект должен отображаться на экране ... (например, если это элемент списка), поведение не является частью области знаний шаблона данных. Перерисовать решение ...

0
ответ дан Gishu 26 August 2018 в 00:51
поделиться
  • 1
    вывод: вы бы посоветовали использовать ресурс dic с кодом позади или нет? Я никогда не использовал его, я сомневаюсь. – Shimmy 30 March 2009 в 16:55
  • 2
    Я бы не стал - мне это не кажется правильным. Словарь должен возвращать значения для определенных ключей. В случае OP, связывая код с шаблоном данных. Я бы предпочел использовать другой подход. Например, используйте модель Command. Мне нужно больше деталей о проблеме OP, чтобы рекомендовать diff soln. – Gishu 30 March 2009 в 19:08
  • 3
    Полностью не согласен. С MVVM существует один сценарий, где чрезвычайно полезно использовать код: разработка прикрепленных свойств. Получите его работу с кодом позади, а затем поместите его в прикрепленное свойство. Это намного быстрее, чем просто создавать прикрепленное свойство с нуля, если у вас нет мозга размером с Манхэттен. – Contango 6 June 2015 в 09:17

Gishu - пока это может показаться «вообще не поощряемой практикой». Вот одна из причин, по которым вы можете это сделать:

Стандартное поведение текстовых полей, когда они получают фокус, каретка должна быть размещена в том же положении, что и при контроле, теряющем фокус. Если вы предпочли бы во всем приложении, что когда пользователь вставляет в любое текстовое поле все содержимое текстового поля, то добавление простого обработчика в словарь ресурсов сделает трюк.

Любая другая причина, по которой вы хотите, чтобы поведение взаимодействия с пользователем по умолчанию было отличным от поведения вне коробки, кажется хорошим кандидатом на код в словаре ресурсов.

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

5
ответ дан Pete Maher 26 August 2018 в 00:51
поделиться

Я не согласен с «ageektrapped» ... использование метода частичного класса не является хорошей практикой. Какова была бы цель разделения словаря со страницы?

Из кода-кода вы можете получить доступ к элементу ax: Name, используя:

Button myButton = this.GetTemplateChild("ButtonName") as Button;
if(myButton != null){
   ...
}

Вы можете сделать этот в методе OnApplyTemplate, если вы хотите подключиться к элементам управления, когда пользовательский контроль загружается. OnApplyTemplate необходимо переопределить, чтобы сделать это. Это обычная практика и позволяет вашему стилю оставаться отключенным от элемента управления. (Стиль не должен зависеть от элемента управления, но элемент управления должен зависеть от стиля).

9
ответ дан Phobis 26 August 2018 в 00:51
поделиться
  • 1
    Фобис Я думаю, что цель отделения словаря со страницы - это повторное использование и читаемость главной страницы xaml. Вышеупомянутое решение сработало и для меня. – cleftheris 2 February 2009 в 17:36
Другие вопросы по тегам:

Похожие вопросы: