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
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.
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
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);
- }
- }