0

我想在所有页面上都有相同的控件TabControl

我的表格中tabControl没有任何东西。tabPages在同一个表单中,我有一些我想自动添加到每个tabPage. 并与他们合作。我怎样才能做到这一点?

我想要这样的东西:

    public chatForm(string chatID, object conversation)
    {
        InitializeComponent();

        createNewTab(chatID, conversation);
    }

    internal void createNewTab(string chatID, object conversation)
    {
        ISIMtabPage newTab = new ISIMtabPage();
        newTab.Text = Converter.getContactName(conversation);
        newTab.Name = chatID;

        newTab.conversation = conversation;

        newTab.avatarBox.Image = new Bitmap("graphics\\anonymousAvatar.png");// how can I work with this control in the selected tab?

我怎样才能做到所有控件都将自动出现在每个控件中,我该tabPage如何使用它们?

4

2 回答 2

1

我有自己的类扩展 TabPage 组件。我只是添加我的属性。但我希望在所有页面上都有相同的组件。如果我调用 addMessage 方法,它只是将文本添加到 tabPage[id].conversationTextBox.Append(message); [...] 如果我单击另一个选项卡,它将显示其他当前对话。我不明白,也不知道该怎么做。– 斯兹达沃斯

这是因为原始类型将通过值传递,通过引用复杂!我找到了这个关于引用和值类型的例子,希望你能从中学习[1]。读完之后试试这个:

@sczdavos 通常您创建一个包含您喜欢使用的所有属性的类,并在您的视图中共享该实例。[...]

[1] http://www.codeproject.com/Articles/32029/Reference-and-Value-Types-in-C

于 2012-08-26T15:22:18.290 回答
1

我会这样做(代码用于 WPF 解决方案,忽略了 WinForm-Tag。但应该类似。):

MyTabItem.xaml.cs

public partial class MyTabItem : TabItem, INotifyPropertyChanged
{
    #region PropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;

    void OnPropertyChanged(string propName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propName));
    }

    #endregion

    #region Properties

    private string myTitle;
    public string MyTitle
    {
        get { return myTitle; } 
        set 
        {
            myTitle = value;
            OnPropertyChanged("MyTitle");
        }
    }

    private string myContent;
    public string MyContent { 
        get { return myContent; } 
        set 
        { 
            myContent = value;
            OnPropertyChanged("MyContent");
        } 
    }

    #endregion

    public MyTabItem()
    {
        InitializeComponent();
    }
}

MyTabItem.xaml

<TabItem x:Class="WpfApplication1.MyTabItem"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            DataContext="{Binding RelativeSource={RelativeSource self}}">

    <TabItem.Header>
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding MyTitle}"/>
        </StackPanel>
    </TabItem.Header>

    <TabItem.Content>
        <Grid>
            <TextBlock Text="{Binding MyContent}" Background="Azure"/>
        </Grid>
    </TabItem.Content>
</TabItem>

主窗口.xaml.cs

public MainWindow()
{
    InitializeComponent();

    var tab = new MyTabItem {MyContent = "Content", MyTitle = "Title"};

    MyTabControl.Items.Add(tab);
}

主窗口.xaml

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <TabControl x:Name="MyTabControl"/>
    </Grid>
</Window>
于 2012-08-26T12:21:09.067 回答