Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Collections.ObjectModel;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
Expand All @@ -14,10 +14,13 @@ namespace iNKORE.UI.WPF.Modern.Gallery.Pages.Controls.Windows
{
public partial class TabViewPage
{
private readonly System.Collections.Generic.HashSet<TabControl> _setupControls = new System.Collections.Generic.HashSet<TabControl>();

public TabViewPage()
{
InitializeComponent();

// Seed the primary demo TabControls with initial tabs.
for (int i = 0; i < 3; i++)
{
tabControl.Items.Add(CreateNewTab(i));
Expand All @@ -31,12 +34,38 @@ public TabViewPage()

private void TabView_Loaded(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 3; i++)
if (sender is not TabControl loadedTabControl) return;

if (_setupControls.Contains(loadedTabControl))
return;

// Hook add button (if visible) once.
var events = TabControlHelper.GetTabControlHelperEvents(loadedTabControl);
events.AddTabButtonClick += TabControl_AddButtonClick;
events.TabCloseRequested += TabControl_TabCloseRequested;
_setupControls.Add(loadedTabControl);

// Only auto-seed for dynamically loaded examples (avoid duplicating those we seeded in ctor)
if (loadedTabControl != tabControl && loadedTabControl != tabControl2 && loadedTabControl != tabControl3)
{
(sender as TabControl).Items.Add(CreateNewTab(i));
for (int i = 0; i < 3; i++)
{
loadedTabControl.Items.Add(CreateNewTab(i));
}
}
}

private void TabControl_AddButtonClick(TabControl sender, object args)
{
sender.Items.Add(CreateNewTab(sender.Items.Count));
sender.SelectedIndex = sender.Items.Count - 1;
}

private void TabControl_TabCloseRequested(TabControl sender, TabViewTabCloseRequestedEventArgs args)
{
sender.Items.Remove(args.Item);
}

private TabItem CreateNewTab(int index)
{
TabItem newItem = new TabItem();
Expand Down Expand Up @@ -138,6 +167,7 @@ public void UpdateExampleCode()
if (!this.IsInitialized) return;

Example1.Xaml = Example1Xaml;
Example1.CSharp = Example1CS;
Example2.Xaml = Example2Xaml;
Example3.Xaml = Example3Xaml;
Example4.Xaml = Example4Xaml;
Expand Down Expand Up @@ -168,6 +198,55 @@ public void UpdateExampleCode()
</TabControl>
";

public string Example1CS => $@"
private void TabView_Loaded(object sender, RoutedEventArgs e)
{{
var loadedTabControl = (TabControl)sender;
var events = TabControlHelper.GetTabControlHelperEvents(loadedTabControl);

// hook up add & close
events.AddTabButtonClick += TabControl_AddButtonClick;
events.TabCloseRequested += TabControl_TabCloseRequested;

// seed initial 3 tabs
for (int i = 0; i < 3; i++)
loadedTabControl.Items.Add(CreateNewTab(i));
}}

private void TabControl_AddButtonClick(TabControl sender, object args)
{{
sender.Items.Add(CreateNewTab(sender.Items.Count));
sender.SelectedIndex = sender.Items.Count - 1;
}}

private void TabControl_TabCloseRequested(TabControl sender, TabControlTabCloseRequestedEventArgs args)
{{
sender.Items.Remove(args.Item);
}}

private TabItem CreateNewTab(int index)
{{
var newItem = new TabItem
{{
Header = $""Document {{index}}""
}};
TabItemHelper.SetIcon(newItem, new FontIcon(SegoeFluentIcons.Document));

var frame = new Frame();
frame.Navigated += (s, e) =>
{{
((FrameworkElement)frame.Content).Margin = new Thickness(-18, 0, -18, 0);
}};
switch (index % 3)
{{
case 0: frame.Navigate(typeof(SamplePage1)); break;
case 1: frame.Navigate(typeof(SamplePage2)); break;
case 2: frame.Navigate(typeof(SamplePage3)); break;
}}
newItem.Content = frame;
return newItem;
}}
";
public string Example2Xaml => $@"
<TabControl x:Name=""TabView4""
SelectedIndex=""0"">
Expand Down Expand Up @@ -284,4 +363,4 @@ private void InitializeExample6()

#endregion
}
}
}
Loading