【问题标题】:Building a dynamic TabControl in Silverlight在 Silverlight 中构建动态 TabControl
【发布时间】:2010-07-20 20:10:03
【问题描述】:

我想在 Silverlight 中构建一个由对象集合驱动的 TabControl。我将在下面展示我正在尝试制作原型的一个非常基本的设置的代码。

MainPage.xaml

<UserControl x:Class="DataDrivenTabControl.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
xmlns:local="clr-namespace:DataDrivenTabControl"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">

<UserControl.DataContext>
    <local:MainPage_ViewModel/>
</UserControl.DataContext>

<StackPanel>
    <controls:TabControl>
        <!-- What do I need to do here for a Template? -->
    </controls:TabControl>
</StackPanel>

MainPage_ViewModel.cs

public class MainPage_ViewModel : Base_ViewModel
{
    public MainPage_ViewModel()
    {
        PopulateCollectionOfTabs();
    }

    public ObservableCollection<TabItem_DataViewModel> CollectionOfTabs
    {
        get { return collectionOfTabs; }
        set
        {
            if (collectionOfTabs != value)
            {
                collectionOfTabs = value;
                OnPropertyChanged("CollectionOfTabs");
            }
        }
    }
    private ObservableCollection<TabItem_DataViewModel> collectionOfTabs = new ObservableCollection<TabItem_DataViewModel>();

    private void PopulateCollectionOfTabs()
    {
        this.CollectionOfTabs.Add(
            new TabItem_DataViewModel()
            {
                TabDescription = "Tab 1",
                ButtonDescription = "Button for Tab 1"
            });

        this.CollectionOfTabs.Add(
            new TabItem_DataViewModel()
            {
                TabDescription = "Tab 2",
                ButtonDescription = "Button for Tab 2"
            });
    }
}

TabItem_DataViewModel.cs

public class TabItem_DataViewModel : Base_ViewModel
{
    public string TabDescription
    {
        get { return tabDescription; }
        set
        {
            if (tabDescription != value)
            {
                tabDescription = value;
                OnPropertyChanged("TabDescription");
            }
        }
    }
    private string tabDescription = string.Empty;

    public string ButtonDescription
    {
        get { return buttonDescription; }
        set
        {
            if (buttonDescription != value)
            {
                buttonDescription = value;
                OnPropertyChanged("ButtonDescription");
            }
        }
    }
    private string buttonDescription = string.Empty;
}

在这个例子中,我真正想做的就是让 TabControl 显示一个动态的选项卡列表,这些选项卡将绑定到一个集合(标题中的“Tab 1”和“Tab 2”)当前实施)。当您单击选项卡时,可能会有一个按钮(为简单起见),其中按钮的内容将绑定到 TabItem_DataViewModel 上的 ButtonDescription。这是非常基本的,但如果我可以让它工作,我肯定能够实现我的解决方案的其余部分。

我确定这必须使用 TabControl 上的模板来完成,但我只是将其留空,希望有人能够指出我正确的方向。

任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: silverlight xaml dynamic silverlight-4.0 tabcontrol


    【解决方案1】:

    我能够通过使用 Telerik 的 RadTabControl 使其按预期工作,如下所示。我使用 Telerik 的版本,因为 ItemSource 是一个 IEnumerable,而不是 TabItems 的集合。

    <telerikNavigation:RadTabControl ItemsSource="{Binding CollectionOfTabs}">
            <telerikNavigation:RadTabControl.ItemContainerStyle>
                <Style TargetType="telerikNavigation:RadTabItem">
                    <Setter Property="HeaderTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <StackPanel>
                                    <TextBlock Text="{Binding TabDescription}"/>
                                </StackPanel>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                    <Setter Property="ContentTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <Button Content="{Binding ButtonDescription}" Width="100" HorizontalAlignment="Center"/>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </telerikNavigation:RadTabControl.ItemContainerStyle>
        </telerikNavigation:RadTabControl>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多