Должен ли корневой тег Silverlight быть UserControl или Canvas? - PullRequest
5 голосов
/ 06 февраля 2009

Я читаю Silverlight 2 Unleashed, опубликованный в октябре 2008 года, и в нем есть примеры с корневым тегом canvas:

<Canvas xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Background="Red"
    Width="500"
    Height="300">
        <Ellipse Width="400"...

Однако, когда я создаю новое приложение Silverlight в VS2008, я получаю корневой тег UserControl:

<UserControl x:Class="TestFirst.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300">
    <Grid x:Name="LayoutRoot" Background="White"...

Конечно, я могу изменить это, заменив корневой тег на Canvas, но затем я должен также изменить код, чтобы он наследовал от Canvas вместо UserControl, и должен удалить метод InitializeComponent.

  • Использует ли тег Canvas в качестве корневого стандарта или в книге описан альтернативный способ создания приложений Silverlight?
  • В чем преимущества использования Canvas вместо UserControl в качестве корневого элемента?
  • Почему книга для своих первых примеров создала приложения Silverlight иначе, чем указано по умолчанию в Visual Studio?
  • Есть ли способ создать тег canvas в качестве корневого тега по умолчанию в Visual Studio?

Ответы [ 2 ]

4 голосов
/ 07 февраля 2009

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

Дело в том, что любой элемент XAML может использоваться в качестве корня документа XAML. То, что делает Visual Studio, создавая корень UserControl XAML и связывая его с классом UserControl в коде, на самом деле является частным случаем более общей схемы. Я согласен, что это то, с чем читатель будет сталкиваться большую часть времени, но я также верю в ценность показа того, что все может быть по-другому. Кроме того, также важно показать, что иногда нет никакого кода позади, и что XAML - это язык с множеством функций, даже без «помощи» кода позади класса.

Silverlight 2 Unleashed использует прогрессию, начинающуюся практически с нуля, и с (довольно крутой) кривой обучения. Если вы продолжите читать, вы увидите, что мы начнем использовать Visual Studio чуть позже в книге, и все станет более привычным. Однако вы уже видели, что можете использовать другие элементы в качестве корня, и я думаю, что это имеет образовательную ценность.

Если у вас есть какие-либо вопросы, не стесняйтесь писать здесь или по электронной почте.

Ура, Laurent

0 голосов
/ 07 февраля 2009

Я думаю, что книга, вероятно, сделала что-то не так. Книги, как правило, делают это на самом деле.

Как правило, пользовательский элемент управления должен иметь UserControl в качестве корня. Если вам просто необходим холст для координатно-позиционного рисования для всего элемента управления, поместите холст в качестве первого дочернего элемента UserControl. [Edit:] Во втором примере замените Grid на Canvas - но опять же, только если вам действительно нужен Canvas!

Canvas - очень узкая панель; это явно для координатно-позиционного рисования и не должно использоваться для всего , кроме этого. Если вы используете какой-либо элемент управления вводом, используйте комбинацию Grids, DockPanels и / или StackPanels. И, возможно, даже Canvases для изящных маленьких анимаций рядом с вашими TextBox. :)

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

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