2016-02-03 2 views
0

В XAML, вы можете создать свой собственный многоразовый тип управления в качестве объекта UserControl, как это:XAML пользователя Тип управления Базовый элемент

<UserControl x:Class="MyControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
      <Button Content="Test"/> 
    </Grid> 
</UserControl> 

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

<Grid x:Class="MyControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Button Content="Test"/> 
</Grid> 

В чем разница между этими двумя вариантами? В моем примере они оба происходят от FrameworkElement и расходятся в наследстве оттуда. Но похоже, что они действуют одинаково.

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

ответ

0

Честно говоря, основной причиной наличия разных базовых типов являются свойства.

Если вы обнаружите, что UserControl не имеет требуемых свойств зависимостей - возможно, вам нужно будет время от времени разворачивать некоторый контент, тогда вы можете использовать его на Expander, а не входить в код- позади, чтобы напечатать «propdp» и изобрести колесо, замените шаблон вместо того, чтобы просто набивать вещи в свойство «content» и привязать к свойству Expander «Исключенное».

Выполнение этой функции позволяет размыть линию между UserControl и Custom Control, по существу создавая копию шаблона существующего элемента управления и добавляя к нему; используя существующие свойства и добавляя новые в код, если необходимо.

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

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

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