2015-03-29 7 views
18

Я искал несколько руководств по созданию пользовательских элементов управления в WinRT, и у меня есть вопрос.Когда использовать шаблонный контроль над UserControl?

Предположим, я хочу создать простой элемент управления, содержащий некоторые вещи, такие как сетка с изображением слева и несколько текстовых блоков справа.

Я имею в виду, что-то простое, как:

<Grid Height="100"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="0.3*"/> 
     <ColumnDefinition Width="0.7*"/> 
    </Grid.ColumnDefinitions> 
    <Image Source"/Assets/someRandomImage.png"/> 
    <StackPanel Grid.Column="1" 
       VerticalAlignment="Center"> 
     <TextBlock Text="Some text" 
        Margin="10,0,10,0" 
        FontSize="24" 
        FontWeight="SemiLight" 
        TextTrimming="CharacterEllipsis"/> 
     <TextBlock Text="Some random description..." 
        Margin="10,5,10,0" 
        FontSize="18" 
        FontWeight="Light" 
        Foreground="Gray" 
        TextWrapping="Wrap" 
        TextTrimming="CharacterEllipsis"/> 
    </StackPanel> 
</Grid> 

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

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

Конечно, мне также необходимо добавить свойство x: Name некоторым элементам UIElements внутри элемента управления, чтобы иметь возможность взаимодействовать с ними, но вы получаете эту идею.

Мне было интересно, можно ли использовать один из этих двух методов или лучше использовать его в частности, и почему? Кроме того, мне нравится использовать UserControls, так как я вижу их в окне конструктора, и вместо этого я не смогу сделать это с помощью шаблона, мне нужно будет запустить приложение и создать экземпляр элемента управления, чтобы увидеть, что это на самом деле выглядит.

Спасибо за вашу помощь, я думаю, что я не только один с этим сомнением, так что я надеюсь, что этот вопрос будет помогать другим, а также: D

Sergio

+1

Вы добавляете функциональность в UserControl? Или просто измените способ отображения существующего элемента управления? Для последнего даже шаблон управления был бы достаточным http://www.wpftutorial.net/templates.html – treze

+0

Я добавляю функциональность: обычно я создаю некоторые свойства, DependencyProperties для некоторых привязок и, возможно, анимацию и прочее. Что касается других функций, я обычно создаю ViewModel для UserControl, и я использую это для добавления методов и внутренних привязок. – Sergio0694

+0

Еще одно примечание - вы можете видеть шаблонные элементы управления в проекционном представлении в VS или Blend, если у них нет никакой логики, которая нарушит проектный вид. Вам просто нужно использовать экземпляр вашего элемента управления в 'UserControl' /' Page', и он должен появиться. –

ответ

21

UserControl

  • UserControl намного проще создать с помощью Visual Studio или Смешать дает вам достойную поддержку видовой.
  • Обычно вы используете его для создания представления в своем приложении из нескольких элементов управления. '
  • Он наилучшим образом подходит для просмотра в полноэкранном или полном окне или если у вас есть сложные виды, которые вы хотите разбить в меньших, возможно многократно используемых фрагментах кода.
  • Такой вид часто подкрепляется соответствующей моделью представления, если вы решите принять шаблон MVVM.

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

  • Обычно он может использоваться только в пределах одного приложения.

пользовательского управления

  • custom control или в некоторых случаях templated control лучше всего подходит для небольшой кусок пользовательского интерфейса, который служит одной цели - она ​​визуализирует одного определенного типа информации.
  • Шаблонный элемент управления может изменить свой шаблон, чтобы настроить визуальные эффекты для конкретного варианта использования. Это позволяет вам иметь кнопку, которая выглядит как кнопка по умолчанию в одном приложении, округленная одна в другой, и одна сделана исключительно из изображений в другой. Это делает его более многоразовым, что имеет смысл, если вы делаете несколько приложений или хотите поделиться своим замечательным контролем с миром.
  • Хорошо написанный пользовательский контроль обычно можно использовать повторно в нескольких приложениях, поскольку он не зависит от бизнес-логики конкретного приложения.
  • Это обычно происходит из существующего элемента управления платформы, такие как Button, ToggleButton, ContentControl, Slider, TextBox или ListView, чтобы добавить или переопределить его логику. Бывают случаи, когда имеет смысл делать это с нуля, подклассифицируя «фактически абстрактные» Control, ItemsControl, RangeBase, Shape или даже FrameworkElement (последние два не являются шаблонами).
  • Визуальное дерево шаблонного элемента управления загружается при загрузке шаблона, который может появиться до тех пор, пока видимость элемента управления сначала не изменится с Collapsed на Visible, что позволяет отложить загрузку частей вашего пользовательского интерфейса, чтобы повысить производительность.
  • Поскольку шаблон управления загружается только один раз, они идеально подходят для использования внутри любого элемента ItemsControl DataTemplate (списки, gridviews и т. Д.). Если бы вы использовали UserControl, ваша производительность могла бы сильно пострадать, потому что UserControl XAML анализируется снова и снова.

Пользовательские панели

custom panel еще один тип элемента пользовательского интерфейса, который позволяет настраивать, как она выкладывает своих детей.

+0

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

+0

О, у меня также есть пользовательские элементы управления, которые многократно используются в различных проектах, но обычно вы пытаетесь сделать эти шаблоны в конечном итоге для повышения эффективности и поддержки настройки. Обратите внимание, что 'Страница' также является« UserControl », поэтому, если у вас нет приложений, которые используют общие страницы, вы обычно используете их для каждого приложения. Если вы обнаружите, что у вас есть много «UserControls», которые разделяются между приложениями - подумайте о том, чтобы сделать их шаблонами и, возможно, с открытым исходным кодом. Я видел, как кто-то создал приложение с версией для каждого футбольного клуба в Великобритании - они, вероятно, поделились всеми «страницами», но это уникально ... –

+0

Спасибо за подробное объяснение! У меня есть еще один вопрос: если бы я создал пользовательский элемент управления, я имею в виду шаблонный элемент управления, не имеет значения, создаю ли шаблон в XAML, а затем применил его к элементу управления или, если бы я напрямую построил визуальное дерево во время выполнения внутри моего настраиваемого конструктора? Я считаю, что второй вариант будет проще использовать в некоторых ситуациях (где у меня есть только несколько элементов пользовательского интерфейса внутри моего настраиваемого элемента управления). – Sergio0694

3

Создание пользовательского элемента управления много проще, чем создание настраиваемого элемента управления. Для начала пользовательский элемент управления имеет поддержку дизайнера. Недостатком пользовательского элемента управления является то, что он ограничен по сравнению с пользовательским элементом управления.

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

Таким образом, пользовательское управление для «простых» элементов управления пользовательское управление для сложных элементов управления. Любой пользовательский элемент управления может быть создан пользовательским элементом управления, но не наоборот.

Смежные вопросы