То, что я делаю, установлено текстовое свойство выпадающего списка ПОСЛЕ ТОГО, КАК я связываю с данными его. Что-то вроде этого:
protected void LoadPersonComboBox()
{
var p = new PeopleBLL();
rcmbboxEditPerson.DataSource = p.GetPeople();
rcmbboxEditPerson.DataBind();
rcmbboxEditPerson.Text = "Please select an existing person to edit...";
}
Это заставляет начальное видимое значение из этого выпасть, обнаруживаются, но не на самом деле быть частью выпадающего, и при этом это не выбираемое.
Чтобы немного расширить то, что сказал Алекс:
Для 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>
As far as I know, there's no specific significance for the '.
' in XML. In other words,
is a different and unrelated tag from . The relationship in XAML is a semantic understood by the XAML parser only.
On a separate note, the snippet in your question is not XAML; it's part of the deployment manifest for a Silverlight application. Again, though, the semantic of the '.
' is understood by the manifest parser, not the XML parser.
Нашел сегодня в WPF в действии с Visual Studio 2008 от Фельдмана и Даймона
Возможно, вы заметили интересную вещь о значениях свойств в листинге 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 для всех видов свойств. Вам просто нужно помнить, что свойства с точками посередине действительно устанавливают значения, которые используются содержащим элементом управления. Приятно то, что когда вы редактируете свойства элемента управления в редакторе свойств, присоединенные свойства отображаются как часть набора свойств элемента управления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! -).