我正在使用 WPF 编写一个应用程序,其中一部分涉及为用户管理用于配置自定义内部设备的各种文件。我需要能够在同一个 TabControl 中的选项卡中操作不同类型的配置,这意味着 TabItems 的内容必须是动态生成的。我想用 ControlTemplates 来做这件事,但我还没有成功获得一个工作模板。我在我的 Window 资源中定义了一个名为“pendantConfigurationTabItemTemplate”的 ControlTemplate,我使用以下代码将模板(其中包含我需要访问的命名项目)应用到 TabItems 并将它们添加到它们的父 TabControl :
<ControlTemplate x:Key="pendantConfigurationTabItemTemplate" TargetType="TabItem">
<StackPanel Orientation="Vertical">
<my:PendantConfigurationFileEditor x:Name="configurationEditor"/>
<StackPanel Style="{StaticResource defaultOkCancelButtonsContainerStyle}">
<Button Style="{StaticResource defaultOkCancelButtonStyle}"/>
<Button Style="{StaticResource defaultOkCancelButtonStyle}" Click="OkButton_Click"/>
</StackPanel>
</StackPanel>
</ControlTemplate>
后面的代码:
TabItem ConfigTab = new TabItem();
switch (ConfigFile.Device)
{
case DeviceType.PENDANT:
{
ControlTemplate TabTemplate = Resources["pendantConfigurationTabItemTemplate"] as ControlTemplate;
ConfigTab.Template = TabTemplate;
ConfigTab.ApplyTemplate();
object Editor = TabTemplate.FindName("configurationEditor", ConfigTab);
PendantConfigurationFileEditor ConfigFileEditor = Editor as PendantConfigurationFileEditor;
ConfigFileEditor.PendantConfiguration = DeviceConfig;
break;
}
default:
/* snipped */
return;
}
ConfigTab.Header = ConfigFile.ConfigurationName;
this.EditorTabs.Items.Add(ConfigTab);
this.EditorTabs.SelectedIndex = this.EditorTabs.Items.Count - 1;
但是,每当我运行程序时,选项卡控件都不会添加任何选项卡,而是选项卡控件(似乎)被模板的内容替换或覆盖。有人可以帮我解决这个问题吗?
实际上,我想做的是使用 WPF 模板作为 TabItem 工厂