首页 > 解决方案 > 如何动态更改 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"
        });
    }
}

标签: c#wpf

解决方案


推荐阅读