Se ciò che si vuole fare è semplicemente rendere il codice più gestibile allora mi sento di raccomandare di definire i dati di ciascuna scheda in un controllo utente, ma ho ancora il TabItem nel controllo tab principale.
Supponiamo che il codice originale era questa:
<TabControl>
<TabItem Header="Tab 1">
<Grid>
<TextBlock Text="Tab Data" />
</Grid>
</TabItem>
</TabControl>
Per rendere il codice più gestibile si potrebbe rompere il contenuto della scheda in un UserControl come ad esempio:
<UserControl x:Class="WpfApplication19.Tab1Data"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<Grid>
<TextBlock Text="Tab Data" />
</Grid>
</UserControl>
e quindi utilizzare tale utente controllo nel TabControl in questo modo:
<TabControl>
<TabItem Header="Tab 1">
<tabData:Tab1Data />
</TabItem>
</TabControl>
Se si desidera includere e TabItem nel controllo utente, quindi è possibile farlo creando prima un controllo utente e quindi modificare il tipo del controllo utente sul tipo TabItem (assicurarsi di modificarlo sia nel nodo radice xaml che nel codice sottostante).
Questo sarebbe lasciare con un controllo della linguetta che assomiglia a questo:
<TabControl>
<tabData:TabItem1 />
<tabData:TabItem2 />
<tabData:TabItem3 />
</TabControl>
E ogni TabItem1 'di controllo utente' sarebbe di tipo TabItem. Ecco un esempio:
<TabItem x:Class="WpfApplication19.TabItem1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Header="Tab 1"
>
<Grid>
<TextBlock Text="Tab Data" />
</Grid>
</TabItem>
E come ho già detto, assicurarsi di modificare il codice dietro in modo che TabItem estende al posto di controllo utente:
public partial class TabItem1 : TabItem
{
public TabItem1()
{
InitializeComponent();
}
}
fonte
2009-10-19 20:25:57
Grazie mille. Funziona perfettamente come hai mostrato nella tua risposta! –
tabdata proviene da dove? –
Come hai ottenuto che la proprietà 'xmlns' funzioni come hai mostrato? Per quanto ne so, richiede di essere in un'assemblea straniera. –