Hallö,
Ich ein Gernerelles Problem mit dem TabController und hab mir mal so ein bisschen mein eigenen TabController gebaut und wolle mal wissen ob das so machen kann![:D](https://www.vb-paradise.de/wcf/images/smilies/biggrin.png)
Ich hab es so Dynamisch wie möglich gestaltet.
Das ganze Basiert auf ein Grid in dem ein Label und ein Canvas lagert.
Das system ist so: Tab-Kopf erstellen, dazu eine Page, bei klick wird die Page zurück gegeben.
Diese kann dann in einem Frame dargestellt werden.
![](https://www.vb-paradise.de/index.php/Attachment/39682-Screenshot-23-png/?thumbnail=1)
![](https://www.vb-paradise.de/index.php/Attachment/39683-Sketch-png/?thumbnail=1)
Spoiler anzeigen
Ich ein Gernerelles Problem mit dem TabController und hab mir mal so ein bisschen mein eigenen TabController gebaut und wolle mal wissen ob das so machen kann
![:D](https://www.vb-paradise.de/wcf/images/smilies/biggrin.png)
Ich hab es so Dynamisch wie möglich gestaltet.
Das ganze Basiert auf ein Grid in dem ein Label und ein Canvas lagert.
Das system ist so: Tab-Kopf erstellen, dazu eine Page, bei klick wird die Page zurück gegeben.
Diese kann dann in einem Frame dargestellt werden.
C#-Quellcode
-
- /// <summary>
- /// Interaktionslogik für TabHeader.xaml
- /// </summary>
- public partial class TabHeader : UserControl
- {
- private Label HeaderTitle { get => TitleLabel; set => TitleLabel = value; }
- private Canvas Underline { get => UnderlineUx; set => UnderlineUx = value; }
- private static GridLength TitleGridLength = new GridLength(27, GridUnitType.Star);
- private static GridLength UnderLineGridLength = new GridLength(3, GridUnitType.Star);
- private static GridLength NoneUse = new GridLength(0, GridUnitType.Pixel);
- private static GridLength NullUse = new GridLength(1, GridUnitType.Star);
- public Page TabPage { get; set; }
- public event EventHandler<Page> OnClick;
- #region Title
- public string Title{
- get => HeaderTitle.Content as string;
- set => HeaderTitle.Content = value;
- }
- public SolidColorBrush TitleColor {
- get => HeaderTitle.Foreground as SolidColorBrush;
- set => HeaderTitle.Foreground = value;
- }
- #endregion
- #region Underline
- #region Private
- private SolidColorBrush _NoneColor;
- private bool _IsSelect = false;
- private linePosition _UnderlinePosition = linePosition.Bottom;
- #endregion
- #region Propertys
- [Category("Underline")]
- public SolidColorBrush SelectColor { get; set; }
- [Category("Underline")]
- public SolidColorBrush NoneColor { get => _NoneColor; set { _NoneColor = value; Underline.Background = value; } }
- [Category("Underline")]
- public SolidColorBrush HoverColor { get; set; }
- [Category("Underline")]
- public bool IsSelect{ get => _IsSelect; set => Set_IsSelect(value); }
- [Category("Underline")]
- public double UnderlineHeight{ get => Underline.Height; set => SetUnderlineHeight(value); }
- [Category("Underline")]
- public double UnderlineWidth { get => Underline.Width; set => SetUnderlineWidth(value); }
- [Category("Underline")]
- public linePosition UnderlinePosition { get => _UnderlinePosition; set => SetUnderlinePosition(value); }
- #endregion
- #region Method
- private void SetUnderlinePosition(linePosition value)
- {
- _UnderlinePosition = value;
- switch (_UnderlinePosition)
- {
- case linePosition.Top:
- SetupRow(UnderLineGridLength, TitleGridLength);
- SetupColumns(NullUse, NoneUse);
- SetupUIelement(Underline, 0, 0);
- SetupUIelement(HeaderTitle, 0, 1);
- break;
- case linePosition.Right:
- SetupRow(UnderLineGridLength, NoneUse);
- SetupColumns(TitleGridLength, UnderLineGridLength);
- SetupUIelement(Underline, 1, 0);
- SetupUIelement(HeaderTitle, 0, 0);
- break;
- case linePosition.Bottom:
- SetupRow(TitleGridLength, UnderLineGridLength);
- SetupColumns(NullUse, NoneUse);
- SetupUIelement(Underline, 0, 1);
- SetupUIelement(HeaderTitle, 0, 0);
- break;
- case linePosition.Left:
- SetupRow(UnderLineGridLength, NoneUse);
- SetupColumns(UnderLineGridLength, TitleGridLength);
- SetupUIelement(Underline, 0, 0);
- SetupUIelement(HeaderTitle, 1, 0);
- break;
- }
- }
- private void SetUnderlineWidth(double value)
- {
- int colunm = Grid.GetColumn(Underline);
- if (_UnderlinePosition == linePosition.Left || _UnderlinePosition == linePosition.Right)
- _57814_.ColumnDefinitions[colunm].Width = double.IsNaN(value) ? UnderLineGridLength : new GridLength(value, GridUnitType.Pixel);
- Underline.Width = value;
- }
- private void SetUnderlineHeight(double value)
- {
- int row = Grid.GetRow(Underline);
- if (_UnderlinePosition == linePosition.Top || _UnderlinePosition == linePosition.Bottom)
- _57814_.RowDefinitions[row].Height = double.IsNaN(value) ? UnderLineGridLength : new GridLength(value, GridUnitType.Pixel);
- Underline.Height = value;
- }
- private void Set_IsSelect(bool value) {
- _IsSelect = value;
- Underline.Background = _IsSelect ? SelectColor : NoneColor;
- }
- private void SetNoneColor(SolidColorBrush value) {
- _NoneColor = value;
- Underline.Background = _NoneColor;
- }
- #endregion
- #endregion
- public enum linePosition
- {
- Top, Left, Right, Bottom
- }
- public TabHeader() : base()
- {
- InitializeComponent();
- HeaderTitle = TitleLabel;
- Underline = UnderlineUx;
- }
- public void SetHoverColor()
- {
- Underline.Background = HoverColor;
- }
- public void SetNoneColor()
- {
- Underline.Background = IsSelect ? SelectColor : NoneColor;
- }
- public void SetSelcted()
- {
- IsSelect = true;
- Underline.Background = SelectColor;
- }
- private void SetupRow(GridLength Row_0, GridLength Row_1)
- {
- RowDefinitionCollection rdc = _57814_.RowDefinitions;
- rdc[0].Height = Row_0;
- rdc[1].Height = Row_1;
- }
- private void SetupColumns(GridLength Column_0, GridLength Column_1)
- {
- ColumnDefinitionCollection cdc = _57814_.ColumnDefinitions;
- cdc[0].Width = Column_0;
- cdc[1].Width = Column_1;
- }
- private void SetupUIelement(UIElement element, int Column, int row)
- {
- Grid.SetColumn(element, Column);
- Grid.SetRow(element, row);
- }
- protected override void OnMouseEnter(MouseEventArgs e)
- {
- SetHoverColor();
- base.OnMouseEnter(e);
- }
- protected override void OnMouseLeave(MouseEventArgs e)
- {
- SetNoneColor();
- base.OnMouseLeave(e);
- }
- protected override void OnMouseDown(MouseButtonEventArgs e)
- {
- SetSelcted();
- if(OnClick != null)
- OnClick(this, TabPage);
- base.OnMouseDown(e);
- }
- }