2011-06-02 37 views
0

我很新的WPF和XAML和不完全明白怎麼做了以下(VS2010,WPF,VB.net):XAML代碼佈局控件類

我有繼承的自定義類從TabItem中,並在這個類中我有我想要在我的標籤頁上,一個RichTextBox和一個文本框的幾個控件。這些TabItems將在運行時動態創建,並隨用戶需要添加到TabControl。如何創建XAML代碼並存儲它,以便在運行時動態創建自定義類時,它會根據需要列出兩個包含的控件?

Public Class CodePage : Inherits TabItem 
     Private RTB As RichTextBox 
     Private TB As TextBox 
     ... 
    End Class 

我在XAML猜測:

<Window x:Class="MainWindow" 
     xmlns:local="clr-namespace:KRL" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

     <Style TargetType="{x:Type local:CodePage}"> 
      <Grid> 
       NEED HELP HERE 
      </Grid> 
     </Style> 

     <Grid> 
      ... 
     </Grid> 
    </Window 

預先感謝您和抱歉,如果這已被問過,我試過研究和不理解。

回答

2

首先,您的自定義TabItem需要重寫元數據,以便根據您的新類型而不是基類獲取正確的樣式(道歉 - 我使用過C#,因爲我在VB中不夠精通):

public static CodePage() 
{ 
    FrameworkElement.DefaultStyleKeyProperty.OverrideMetadata(
     typeof(CodePage), 
     new FrameworkPropertyMetadata(typeof(CodePage))); 
} 

這將讓你在你的主題(Generic.xaml)這樣定義默認的樣式:

<Style TargetType="{x:Type local:CodePage}"> 
    ... 
</Style> 

在這種風格,你可以定義的模板。這告訴WPF如何在邏輯樹中找到它的實例時再呈現該控件。

通過外觀的東西,你已經在代碼而不是你的模板中創建了控件。這是個錯誤。您應該定義依賴項屬性來將數據存儲在您的類中,並定義模板中的外觀(無論是文本框,富文本框還是其他內容)。一個例子模板可能是這樣的:

我會那麼可以使用您的代碼頁類是這樣的:

<TabControl> 
    <whatever:CodePage Header="Hello" Property1="Foo" Property2="Bar"/> 
</TabControl> 

那麼你就需要一個定製TabControl重寫它的容器一代返回CodePage而不是TabItem的實例,但那是另一回事。

+0

嗨肯特,謝謝你的答案。這是什麼:代碼頁你寫了什麼,即我把什麼?我知道,我很新。最後,我如何選擇正確的答案?我找不到「正確答案」按鈕。謝謝。 – 2011-06-03 16:05:09

+0

請參閱此頁(http://msdn.microsoft.com/en-us/library/ms747086.aspx)[http://msdn.microsoft.com/en-us/library/ms747086.aspx]。 – Code0987 2011-06-03 18:16:21

1

只是我的兩個意義,但它看起來像你正在寫一個WinForms應用程序的方式。有了WPF的強大功能,您可能根本不需要從TabItem繼承CodePage。你有沒有看過任何MVVM文章?在高層次上,我會說你想改爲創建一個CodePageViewModel,然後創建一個DataTemplate,以便它在Microsoft的TabItem中正確顯示你的控件。