如何动态更改ContentControl的模板

时间:2019-07-04 09:38:48

标签: c# wpf

我有一个带有模板的内容控件,我想在软件运行时进行动态更改。我是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"
        });
    }
}

0 个答案:

没有答案