Как установить значение ControlTemplate в UWP

Я работал над проектом Xamarin и сделал собственный рендерер для своего пользовательского элемента управления в проекте UWP. Я нашел, как установить ControlTemplate с помощью кода XML.

Путь XML:

var tb = new TextBox(); // or what I do in Xamarin var tb = Control;

var ct = (Controls.ControlTemplate)XamlReader.Load(@"
<ControlTemplate TargetType=""TextBox"" xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
    <Grid>
       ....
    </Grid>
</ControlTemplate>");

tb.Template = ct;

Но как я могу сделать то же самое в коде?

var tb = new TextBox(); // or what I do in Xamarin var tb = Control;


var ct = new ControlTemplate();
ct.TargetType = typeof(TextBox);

var grid = new Grid();
ct.VisualTree = grid // This is how it was done in wpf but there is no such option in UWP

tb.Template = ct;

1 ответ

Решение

Он не поддерживается в UWP, и ранее я не нашел способа установить его напрямую. Согласно документам MS.

ControlTemplate: используется в качестве значения свойства Control.Template, которое определяет визуальные элементы управления путем применения шаблона. Вы почти всегда определяете ControlTemplate как ресурс XAML, используя неявный ключ TargetType, который совпадает со стилем, который устанавливает Control.Template с помощью Setter. Вы редко, если когда-либо, присваиваете значение Control.Template непосредственно в экземпляре элемента управления.

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

Другие вопросы по тегам