Подтвердить что ты не робот

Когда использовать шаблонный контроль над UserControl?

Я искал несколько руководств по созданию пользовательских элементов управления в WinRT, и у меня есть вопрос.

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

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

<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

Серхио

4b9b3361

Ответ 1

UserControl

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

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

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

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

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

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

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

Ответ 2

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

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

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