更新1
如果ControlTemplate有绑定,XamlReader.Load(...)
会工作吗?
<ControlTemplate TargetType="charting:LineDataPoint">
<Grid>
<ToolTipService.ToolTip>
<ContentControl Content="{Binding Value,Converter={StaticResource DateToString},ConverterParameter=TEST}"/>
</ToolTipService.ToolTip>
<Ellipse Fill="Lime" Stroke="Lime" StrokeThickness="3" />
</Grid>
</ControlTemplate>
我想从后面的代码中实现这一点。
<ControlTemplate>
<Ellipse Fill="Green" Stroke="Red" StrokeThickness="3" />
</ControlTemplate>
我搜索了很多人都在展示FrameworkElementFactory
&amp; ControlTemplate的VisualTree
属性。这些在.NET Store for Apps中无法使用。
任何人都知道从代码后面创建ControlTemplate
吗?
答案 0 :(得分:1)
试试这个:
private static ControlTemplate CreateTemplate()
{
const string xaml = "<ControlTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><Ellipse Fill=\"Green\" Stroke=\"Red\" StrokeThickness=\"3\" /></ControlTemplate>";
var сt = (ControlTemplate)XamlReader.Load(xaml);
return сt;
}
可能有一个更漂亮的解决方案,但这个样本有效。
添加:不要忘记包含Windows.UI.Xaml.Markup命名空间:
using Windows.UI.Xaml.Markup;
答案 1 :(得分:0)
来自this链接我得到的是controltemplate属于页面的xaml部分,因为你无法从简单的运行时Apis改变它们。是的thr可能是这样做但不建议..
答案 2 :(得分:0)
您可以为控件定义模板部件,然后在模板中定义一个可以通过编程方式检索的面板。
[TemplatePart(Name = "RootPanel", Type = typeof(Panel))]
public class TestControl : Control
{
private Panel panel;
protected override void OnApplyTemplate()
{
base.OnApplyTemplate();
panel = (Panel) GetTemplateChild("RootPanel");
panel.Children.Add(new Ellipse()
{
Fill = new SolidColorBrush(Colors.Green),
Stroke = new SolidColorBrush(Colors.Red),
StrokeThickness = 3,
VerticalAlignment =VerticalAlignment.Stretch,
HorizontalAlignment = HorizontalAlignment.Stretch
});
}
}
<ControlTemplate TargetType="local:TestControl">
<Grid x:Name="RootPanel" />
</ControlTemplate>