0

我从事 Xamarin 项目并为我在 UWP 项目中的自定义控件制作了自定义渲染器。我找到了如何使用 xml 代码设置 ControlTemplate。

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;
4

1 回答 1

1

UWP中不支持,之前没找到直接设置的方法。根据 MS 文档。

ControlTemplate:这用作 Control.Template 属性的值,该属性通过应用模板来定义控件的视觉效果。您几乎总是将 ControlTemplate 定义为 XAML 资源,使用与使用 Setter 设置 Control.Template 的 Style 相同的隐式键 TargetType。您很少直接在控件实例上为 Control.Template 赋值。

除了可能深入研究反射,或者按照您的第一个示例使用 XAMLReader 之外,我从未找到另一种方法来做到这一点,就像您在 WPF 中所做的那样。

于 2017-05-28T07:11:03.533 回答