Frage zu TabControl bzw. TabItems

  • WPF

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von Parmaster.

    Frage zu TabControl bzw. TabItems

    Hallo!

    Gibt es mit WPF die Möglichkeit, dass sich die TabItems in der Breite dynamisch anpassen je nachdem wieviele TabItems es sind?
    Also als Beispiel ist das TabControl 1000px breit, dann sollen, wenn 2 TabItems vorhanden sind, beide je 50% breit sein, bei 3 33%, bei 25%, usw.?

    Ich finde dazu nichts, oder suche an der falschen Stelle.
    Kann mir jemand einen Tipp geben.
    Danke!

    Parmaster schrieb:

    Ich suche etwas wo man dies komplett mit XAML machen kann, benutze weder C# noch VB.
    siehe TabControl.Template in Zeile 11 (war im Link oben so vorgeschlagen)...
    Spoiler anzeigen

    XML-Quellcode

    1. <Window x:Class="WpfApp1.MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    6. xmlns:local="clr-namespace:WpfApp1"
    7. mc:Ignorable="d"
    8. Title="MainWindow" Height="200" Width="400">
    9. <TabControl Margin="20" >
    10. <TabControl.Template>
    11. <ControlTemplate TargetType="TabControl">
    12. <DockPanel>
    13. <UniformGrid IsItemsHost="True" Rows="1" DockPanel.Dock="Top"></UniformGrid>
    14. <ContentPresenter ContentSource="SelectedContent"></ContentPresenter>
    15. </DockPanel>
    16. </ControlTemplate>
    17. </TabControl.Template>
    18. <TabItem Header="Years">
    19. <ListBox Background="AntiqueWhite">
    20. <TextBlock Text="2015"/>
    21. <TextBlock Text="2016"/>
    22. <TextBlock Text="2017"/>
    23. </ListBox>
    24. </TabItem>
    25. <TabItem Header="Tables">
    26. <ListBox Background="AliceBlue">
    27. <TextBlock Text="Table1..."/>
    28. <TextBlock Text="Table2..."/>
    29. <TextBlock Text="Table3..."/>
    30. </ListBox>
    31. </TabItem>
    32. <TabItem Header="Favorites">
    33. <ListBox Background="LightGray">
    34. <TextBlock Text="Favorite1..."/>
    35. <TextBlock Text="Favorite2..."/>
    36. <TextBlock Text="Favorite3..."/>
    37. </ListBox>
    38. </TabItem>
    39. </TabControl>
    40. </Window>

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „VB1963“ ()

    Oh man, sorry, du hast natürlich recht.
    Habe mir den Link gestern angeschaut und auch ausprobiert, dann ist VS abgestürzt, und ich dachte es liegt daran. Hatte dann keine Lust mehr.
    Gerade eben nochmal ausprobiert, es funktioniert und ist genau das was ich gesucht habe. :thumbsup:

    Jetzt muss ich nur noch rausfinden wie man die Header etwas schöner bekommt. ^^

    Vielen Dank nochmal für deine Hilfe!

    Amro schrieb:

    Richtig wäre:
    Du könntest es über Styles machen.
    Du könntest es über Converter machen.


    Was meinst du mit "Styles" genau?


    Und das hier funktioniert nicht (kennt x nicht):

    XML-Quellcode

    1. <Grid>
    2. <UniformGrid Columns="4" Margin="5,0">
    3. <FrameworkElement x:Name="c1"/>
    4. <!-- no need to add the other three -->
    5. </UniformGrid>
    6. <TabControl>
    7. <TabItem Header="header" Width="{Binding ElementName=c1, Path=ActualWidth}"/>
    8. <TabItem Header="header" Width="{Binding ElementName=c1, Path=ActualWidth}"/>
    9. <TabItem Header="header" Width="{Binding ElementName=c1, Path=ActualWidth}"/>
    10. <TabItem Header="header" Width="{Binding ElementName=c1, Path=ActualWidth}"/>
    11. </TabControl>
    12. </Grid>
    Welches andere meinst du. ?(
    Jedes Window ist eigentlich eine Klasse und das x: ist in xaml ganz oben definiert.

    Zu den Style hier ein Link: learn.microsoft.com/de-de/dotn…rview?view=netdesktop-7.0

    Du musst dich schon etwas einlesen.
    Hier im Blog gibt es auch gute Tutorials dazu, zum Bsp.
    Nofear23. Hat da ein gutes Tutorial auf der Seite dazu.
    Das andere meinte ich, bei mir ist kein x definiert.

    XML-Quellcode

    1. <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Width="1334" Height="716" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,0,0,0">
    2. <Grid>
    3. <TabControl Style="{DynamicResource TabControlStyleStretch}" Margin="20" >
    4. <TabControl.Template>
    5. <ControlTemplate TargetType="TabControl">
    6. <DockPanel>
    7. <UniformGrid IsItemsHost="True" Rows="1" DockPanel.Dock="Top"></UniformGrid>
    8. <ContentPresenter ContentSource="SelectedContent"></ContentPresenter>
    9. </DockPanel>
    10. </ControlTemplate>
    11. </TabControl.Template>
    12. <TabItem Header="Years">
    13. <ListBox Background="AntiqueWhite">
    14. <TextBlock Text="2015"/>
    15. <TextBlock Text="2016"/>
    16. <TextBlock Text="2017"/>
    17. </ListBox>
    18. </TabItem>
    19. <TabItem Header="Tables">
    20. <ListBox Background="AliceBlue">
    21. <TextBlock Text="Table1..."/>
    22. <TextBlock Text="Table2..."/>
    23. <TextBlock Text="Table3..."/>
    24. </ListBox>
    25. </TabItem>
    26. <TabItem Header="Items">
    27. <ListBox Background="Red">
    28. <TextBlock Text="Item1..."/>
    29. <TextBlock Text="Item2..."/>
    30. <TextBlock Text="Item3..."/>
    31. </ListBox>
    32. </TabItem>
    33. <TabItem Header="Favorites">
    34. <ListBox Background="LightGray">
    35. <TextBlock Text="Favorite1..."/>
    36. <TextBlock Text="Favorite2..."/>
    37. <TextBlock Text="Favorite3..."/>
    38. </ListBox>
    39. </TabItem>
    40. </TabControl>
    41. </Grid></Window>

    XML-Quellcode

    1. <TabControl Style="{DynamicResource TabControlStyleStretch}" Margin="20" >


    Das ist doch ein Style.Das hab ich auch gemeint.

    XML-Quellcode

    1. <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Width="1334" Height="716" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,0,0,0">


    und hier fehlt noch die "x:WindowKlasse"
    Du meinst das hier (von einer neuen C# WPF App):

    XML-Quellcode

    1. ​<Window x:Class="WpfApp2.MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    6. xmlns:local="clr-namespace:WpfApp2"
    7. mc:Ignorable="d"
    8. Title="MainWindow" Height="450" Width="800">
    9. <Grid/>
    10. </Window>


    Wie gesagt, ich benutze weder C# noch VB.NET, sondern PowerShell. Da habe ich keine Klasse und sonstiges, funktioniert auch so. Braucht man das trotzdem?

    XML-Quellcode

    1. Window x:Class="WpfApp2.MainWindow"


    Normaleweise wird der XAML Code mit der Codebehind Datei verbunden über das X:Class.
    Solang du nur Xaml machst ist das nicht nötig.
    Aber wenn du Code schreiben willst und auf deine Eigenschaften in XAML binden willst oder was zuweisen willst, musst du die zwei Dateien irgendwie verbinden. In Visual Studio / WPF wird es über die x:Class geregelt.
    Ja, habe das verstanden, nur benutze ich für dieses Programm kein VS und auch kein C#/VB.NET.
    Deswegen habe ich das x:Class nicht, deswegen funktioniert der Teil hier auch nicht.

    XML-Quellcode

    1. <Grid>
    2. <UniformGrid Columns="4" Margin="5,0">
    3. <FrameworkElement x:Name="c1"/>
    4. <!-- no need to add the other three -->
    5. </UniformGrid>
    6. <TabControl>
    7. <TabItem Header="header" Width="{Binding ElementName=c1, Path=ActualWidth}"/>
    8. <TabItem Header="header" Width="{Binding ElementName=c1, Path=ActualWidth}"/>
    9. <TabItem Header="header" Width="{Binding ElementName=c1, Path=ActualWidth}"/>
    10. <TabItem Header="header" Width="{Binding ElementName=c1, Path=ActualWidth}"/>
    11. </TabControl>
    12. </Grid>