我有一个简单的 DataTemplateSelector 设置:
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
if (element != null && item != null && item is ParameterViewModel)
{
ParameterViewModel paramItem = item as ParameterViewModel;
if (paramItem.ControlInfo.Type == "slider")
{
return element.FindResource("sliderParam") as DataTemplate;
}
else if (paramItem.ControlInfo.Type == "button")
{
return element.FindResource("buttonParam") as DataTemplate;
}
...... etc
这一切都很好,我已将它添加到我的 XAML 中并且它按预期工作。
现在,我要做的是:如果满足条件,则在返回之前向 DataTemplate 添加一些额外的控件。我的第一次尝试是创建一个 StackPanel FrameworkElementFactory,并将 DataTemplate 的 VisualTree 以及我希望添加的额外控件添加到其中,然后返回一个 DataTemplate,并将 VisualTree 设置为 FrameWorkElementFactory。
例如
FrameworkElementFactory spFactory = new FrameworkElementFactory(typeof(StackPanel));
if (paramItem.ControlInfo.Type == "slider")
{
spFactory.AppendChild((element.FindResource("sliderParam") as DataTemplate).VisualTree);
}
...
//add my extra controls
if(condition..)
{
spFactory.AppendChild(extraControl);
}
return new DataTemplate { VisualTree = spFactory };
但是,由于 DataTemplate 是在 XAML 中定义的,因此 VisualTree 属性将始终返回 null。
如何向 DataTemplate 添加控件?