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

私は次のようにします (コードは 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>

MainWindow.xaml.cs

public MainWindow()
{
    InitializeComponent();

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

    MyTabControl.Items.Add(tab);
}

MainWindow.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 に答える
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 に答える