период в XML-тэгах

То, что я делаю, установлено текстовое свойство выпадающего списка ПОСЛЕ ТОГО, КАК я связываю с данными его. Что-то вроде этого:

   protected void LoadPersonComboBox()
    {
        var p = new PeopleBLL();

        rcmbboxEditPerson.DataSource = p.GetPeople();
        rcmbboxEditPerson.DataBind();
        rcmbboxEditPerson.Text = "Please select an existing person to edit...";
    }

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

7
задан Avi 10 October 2009 в 20:40
поделиться

4 ответа

Чтобы немного расширить то, что сказал Алекс:

Для XML точка в имени элемента не имеет значения. a , a. , ab и abc - все допустимые (и уникальные) имена элементов.

К XAML , точка в имени элемента имеет значительное значение. По иронии судьбы, рекомендация, которую цитирует Алекс, предупреждая вас не использовать символы точки в вашем XML, как раз , почему XAML использует точки: чтобы XamlReader мог определить, когда он видит first.name , что name является свойством объекта first . Отсюда:

<ListBox>
  <ListBox.BorderThickness>2</ListBox.BorderThickness>
  <ListBox.BorderBrush>Yellow</ListBox.BorderBrush>
  <TextBox>foo</TextBox>
  <TextBox>bar</TextBox>
  <TextBox>baz</TextBox>
</ListBox>

Почему вы просто не можете сделать это?

<ListBox>
   <BorderThickness>2</BorderThickness>
   ...

Есть две причины. Первый - это простой XML-дизайн: Элементы XML могут содержать несколько элементов с одним и тем же именем. На самом деле это плохая идея моделировать свойства как дочерние элементы, потому что тогда вы должны обеспечить уникальность в своей схеме или иметь правило, что делать со свойством объекта при наличии нескольких дочерних элементов с одинаковым именем:

<ListBox>
   <BorderThickness>2</BorderThickness>
   <BorderThickness>3</BorderThickness>
   <BorderThickness>4</BorderThickness>
   ...

Это почему XAML моделирует свойства как атрибуты , которые XML требует уникальности:

<ListBox BorderThickness='2' BorderBrush='Yellow'...

(Кстати, есть проблема с использованием атрибутов в XAML: если свойства объекта должны быть установлены в определенном порядке, вы не должны использовать атрибуты для их представления. случается , что XamlReader читает атрибуты в том порядке, в котором они появляются в элементе, и присваивает их свойствам в этом порядке. Но инструменты, которые читают и пишут XML, не подходят. t гарантированно сохраняет порядок атрибутов. Это означает, что человек, задавший этот тревожный вопрос, может потерпеть неудачу.)

Другая причина состоит в том, что так много объектов WPF являются контейнерами других объектов. Если бы XAML позволял элементам представлять свойства, вы бы ошиблись, если бы вам нужно было представить объект, у которого есть свойство с тем же именем, что и класс объекта, который он может содержать. Например, вы, конечно, можете создать ItemsControl , у которого есть свойство Label , но что произойдет, если вы захотите сохранить объекты Label в его Items собственность? Эта неоднозначность не может возникнуть в XAML:

<MyItemsControl>
   <MyItemsControl.Label>this is a property of MyItemsControl</MyItemsControl.Label>
   <Label>this is an item that MyItemsControl contains</Label>
</MyItemsControl>
11
ответ дан 6 December 2019 в 14:06
поделиться

Нашел сегодня в WPF в действии с Visual Studio 2008 от Фельдмана и Даймона

4.2.3. Использование прикрепленных свойств

Возможно, вы заметили интересную вещь о значениях свойств в листинге 4.2. Такие свойства, как ширина и отступы, выглядят как обычные атрибуты XML. Но обозначение свойств Left и Top немного отличается:

<Button Canvas.Left="40" Canvas.Top="40" >

Button не имеет свойств для Left и Top. В отличие от Windows Forms, которая предполагала, что все имеет явное расположение, рабочее предположение для WPF состоит в том, что родитель отвечает за размещение каждого элемента управления. Вы увидите это с другими типами макетов. В случае Canvas каждый элемент управления должен иметь явное расположение. Поскольку эта информация требуется макету Canvas, обработка этой информации зависит от макета Canvas.

В «классическом» XML (то есть XML, который может быть подтвержден схемой) вам обычно нужно вводить элемент вокруг каждого дочернего элемента, чтобы указать свойства специфические для родителя - что-то вроде листинга 4.3.

Листинг 4.3. Способ установки свойств для дочерних элементов (но не поддерживается WPF)

<Canvas>
    <CanvasItem Left = "40" Top="40">
        <Button>Button1</Button>
    </CanvasItem>
</Canvas>

Этот подход будет работать, но он довольно подробный, особенно когда у вас много вложенных элементов. Это также подразумевает иерархию, которой на самом деле не существует. Вместо того, чтобы требовать более подробного XML и заставлять Canvas следовать структуре, которая ему, вероятно, не нужна, XAML вводит нотацию, которая позволяет определять свойства, принадлежащие родительскому элементу, для дочернего элемента с использованием точечной нотации:

<Canvas>
  <Button Canvas.Left="40" Canvas.Top="50">Button1</Button>
</Canvas>

Это следует читать как «Когда вы добавляете кнопку на холст, даже если они принадлежат содержащему элементу управления (в данном случае Canvas). Вы увидите эту нотацию в XAML для всех видов свойств. Вам просто нужно помнить, что свойства с точками посередине действительно устанавливают значения, которые используются содержащим элементом управления. Приятно то, что при редактировании свойств элемента управления в редакторе свойств вложенные свойства отображаются как часть набора свойств элемента управления

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

2
ответ дан 6 December 2019 в 14:06
поделиться

XML's naming rules are clearly explained e.g. here:

XML elements must follow these naming rules:

  • Names can contain letters, numbers, and other characters
  • Names cannot start with a number or punctuation character
  • Names cannot start with the letters xml (or XML, or Xml, etc)
  • Names cannot contain spaces

Any name can be used, no words are reserved.

The URL I gave continues with "best practices" recommendations which do include

Avoid "." characters. If you name something "first.name," some software may think that "name" is a property of объект «первый».

Но это всего лишь рекомендация (ее нарушение может затруднить использование вашего XML с определенным программным обеспечением), как и в случае с - . Из рекомендаций единственный действительно важный - избегать использования : в именах XML (поскольку этот действительно конфликтует с пространствами имен XML! -).

0
ответ дан 6 December 2019 в 14:06
поделиться
Другие вопросы по тегам:

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