c# - 如何动态更改 ContentControl 的模板
问题描述
我有一个带有模板的内容控件,我想在软件运行时动态更改。我是 WPF 的新手,正在努力如何做到这一点。到目前为止,我已经干预了 StaticResource 和 RelativeSource。这是代码:
我的模板之一:
<ControlTemplate x:Key="HomeTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<materialDesign:PackIcon Kind="Home" Grid.Row="0"
HorizontalAlignment="Center" VerticalAlignment="Bottom"
Width="100" Height="100" />
<TextBlock Grid.Row="1" Text="HOME PAGE"
HorizontalAlignment="Center" VerticalAlignment="Top" FontSize="50" />
</Grid>
</ControlTemplate>
ContentControl 我正在尝试将模板绑定到。目前它直接设置为模板,但我希望将其设置为我的 C# 代码中的属性,以便我可以动态更改它。
<ContentControl x:Name="content1" Grid.Row="1"
Template="{StaticResource HomeTemplate}"
Visibility="Visible">
</ContentControl>
这是我希望能够更改模板的 ViewModel:
public class TabsViewModel
{
public ObservableCollection<TabData> Tabs { get; set; }
public Command cmdAddTab { get; set; }
public string PageTemplate { get; set; }
public TabsViewModel()
{
var sampleData = Enumerable.Range(0, 1).Select(x => new TabData()
{
TabText = "TAB",
});
Tabs = new ObservableCollection<TabData>(sampleData);
cmdAddTab = new Command(AddTab);
PageTemplate = "StaticResource HomeTemplate";
}
private void AddTab()
{
Tabs.Add(new TabData()
{
TabText = "NEW TAB"
});
}
}
解决方案
推荐阅读
- web - 使用反向代理在 Grafana 旁边运行 Web 服务器
- linux - 使用 python 脚本的 SSH
- angular - ./src/app/component/header.component.ts 找不到模块:错误:无法解析'./header.component.html
- sql-server - 我的 XML 内容包含 为什么 XSLT 1.0 不将其转换为换行符?
- verification - UVM工厂序列生成奇怪的行为
- javascript - 如何在文本输入中调用异步函数?
- java - 对如何使用感到困惑|| 和 && 在同一个 if 语句中。谁能发现问题?
- salesforce - 通过 salesforce 发送列表电子邮件
- r - 删除所有 NA 的第一行之后的所有行
- google-chrome - 浏览器关闭时如何关闭与扩展程序相关的选项卡