В winforms было 2 шаблона: UserControl
позволяет создавать составные элементы управления (группу существующих элементов управления) для повторного использования и стандартизации операций с ним, CustomControl
был полностью настраиваемым элементом управления (часто визуализируется вручную, выполняется иначе, чем стандартные элементы управления и т. д.), что позволяет переопределять и обеспечивает доступ к protected
вещам.Как сделать пользовательский контроль в WPF
В wpf я нашел только шаблон UserControl
(используя экспресс-версию VS).
Для создания пользовательских MyControl
я делаю следующее:
- создать нормальный класс, основанный на
Control
/ContentControl
; - создать словарь ресурсов с
Style
, содержащим шаблоном управления (может быть толькоControlTemplate
, стиль лучше, потому что может содержать другие свойства сеттера)
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MySolution">
<Style x:Key="MyControl" TargetType="local:MyControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:MyControl">
<Grid x:Name="PART_Grid">
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
- связывает их вместе таких как
public class MyControl : Control
{
public MyControl()
{
var dictionary = new ResourceDictionary();
dictionary.Source = new Uri("/MySolution;component/MyControl.xaml", UriKind.Relative);
Style = dictionary["MyControl"] as Style;
Loaded += MyControl_Loaded;
}
}
- определяют ленивые частей аксессоров в шаблоне
private Grid _partGrid;
private Grid PartGrid
{
get
{
if (_partGrid == null)
_partGrid = (Grid)Template.FindName("PART_Grid", this);
return _partGrid;
}
}
Это работает, но я не уверен, что его самый оптимальный путь :
.cs
и.xaml
отдельные файлы (не один сущностей как и в случае МОФUserControl
);- при перемещении
xaml
(например, внутри папкиControls
) код конструктора должен быть отрегулирован; - Аксессуар деталей недоступен в конструкторе (шаблон еще не загружен).
Мой вопрос: есть ли лучший способ сделать индивидуальный контроль с шаблоном? Более удобные, автоматический, с автоматическими аксессорами деталей и т.д.
Вот мои шаблоны WPF
Существует настраиваемый шаблон управления. Также шаблон для библиотеки управления. Не знаю, что такое Экспресс, но не ожидайте, что он будет там. –
@JohanLarsson, см. Править, я вижу [здесь] (http://msdn.microsoft.com/en-us/library/windows/apps/hh738343.aspx) на снимке экрана есть «Templated Control», но я не знаю, это есть. Нет такого онлайн-шаблона с таким именем. Ставится ли мой вопрос «как получить шаблонный контроль для экспресс-издания»? Решает ли он проблемы, перечисленные мной? Кроме того, вы говорите «библиотека управления», у меня есть только «библиотека классов» (как новый проект), имеет ли это значение? – Sinatr
@ Sinatr это действительно может быть выражено. я использовал для проверки вещей в экспресс тоже, в котором не было довольно важных шаблонов. может быть и здесь. – Dbl