Browse Source

Merge pull request #325 from wieslawsoltes/TabStripPlacement

Added TabStripPlacement property for TabControl
pull/328/head
Steven Kirk 10 years ago
parent
commit
de4d045f1a
  1. 16
      src/Perspex.Controls/TabControl.cs
  2. 96
      src/Perspex.Themes.Default/TabControl.paml

16
src/Perspex.Controls/TabControl.cs

@ -28,6 +28,12 @@ namespace Perspex.Controls
private static readonly IMemberSelector s_contentSelector =
new FuncMemberSelector<object, object>(SelectContent);
/// <summary>
/// Defines the <see cref="TabStripPlacement"/> property.
/// </summary>
public static readonly PerspexProperty<Dock> TabStripPlacementProperty =
PerspexProperty.Register<TabControl, Dock>(nameof(TabStripPlacement), defaultValue: Dock.Top);
/// <summary>
/// Initializes static members of the <see cref="TabControl"/> class.
/// </summary>
@ -36,6 +42,7 @@ namespace Perspex.Controls
SelectionModeProperty.OverrideDefaultValue<TabControl>(SelectionMode.AlwaysSelected);
FocusableProperty.OverrideDefaultValue<TabControl>(false);
SelectedItemProperty.Changed.AddClassHandler<TabControl>(x => x.SelectedItemChanged);
AffectsMeasure(TabStripPlacementProperty);
}
/// <summary>
@ -64,6 +71,15 @@ namespace Perspex.Controls
set { SetValue(TransitionProperty, value); }
}
/// <summary>
/// Gets or sets the tabstrip placement of the tabcontrol.
/// </summary>
public Dock TabStripPlacement
{
get { return GetValue(TabStripPlacementProperty); }
set { SetValue(TabStripPlacementProperty, value); }
}
/// <summary>
/// Asks the control whether it wants to reparent the logical children of the specified
/// control.

96
src/Perspex.Themes.Default/TabControl.paml

@ -1,15 +1,81 @@
<Style xmlns="https://github.com/perspex" Selector="TabControl">
<Setter Property="Template">
<ControlTemplate>
<Grid RowDefinitions="Auto,*">
<TabStrip Items="{TemplateBinding Items}"
SelectedIndex="{TemplateBinding Path=SelectedIndex, Mode=TwoWay}"/>
<Carousel Items="{TemplateBinding Items}"
MemberSelector="Content"
SelectedIndex="{TemplateBinding Path=SelectedIndex}"
Transition="{TemplateBinding Transition}"
Grid.Row="1"/>
</Grid>
</ControlTemplate>
</Setter>
</Style>
<Styles xmlns="https://github.com/perspex">
<Style Selector="TabControl[TabStripPlacement=Top]">
<Setter Property="Template">
<ControlTemplate>
<Grid RowDefinitions="Auto,*">
<TabStrip Items="{TemplateBinding Items}"
SelectedIndex="{TemplateBinding Path=SelectedIndex, Mode=TwoWay}"/>
<Carousel Items="{TemplateBinding Items}"
MemberSelector="Content"
SelectedIndex="{TemplateBinding Path=SelectedIndex}"
Transition="{TemplateBinding Transition}"
Grid.Row="1"/>
</Grid>
</ControlTemplate>
</Setter>
</Style>
<Style Selector="TabControl[TabStripPlacement=Bottom]">
<Setter Property="Template">
<ControlTemplate>
<Grid RowDefinitions="*,Auto">
<Carousel Items="{TemplateBinding Items}"
MemberSelector="Content"
SelectedIndex="{TemplateBinding Path=SelectedIndex}"
Transition="{TemplateBinding Transition}"/>
<TabStrip Items="{TemplateBinding Items}"
SelectedIndex="{TemplateBinding Path=SelectedIndex, Mode=TwoWay}"
Grid.Row="1"/>
</Grid>
</ControlTemplate>
</Setter>
</Style>
<Style Selector="TabControl[TabStripPlacement=Left]">
<Setter Property="Template">
<ControlTemplate>
<Grid ColumnDefinitions="Auto,*">
<Border>
<ScrollViewer>
<TabStrip Items="{TemplateBinding Items}"
SelectedIndex="{TemplateBinding Path=SelectedIndex, Mode=TwoWay}">
<TabStrip.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</TabStrip.ItemsPanel>
</TabStrip>
</ScrollViewer>
</Border>
<Carousel Items="{TemplateBinding Items}"
MemberSelector="Content"
SelectedIndex="{TemplateBinding Path=SelectedIndex}"
Transition="{TemplateBinding Transition}"
Grid.Column="1"/>
</Grid>
</ControlTemplate>
</Setter>
</Style>
<Style Selector="TabControl[TabStripPlacement=Right]">
<Setter Property="Template">
<ControlTemplate>
<Grid ColumnDefinitions="*,Auto">
<Carousel Items="{TemplateBinding Items}"
MemberSelector="Content"
SelectedIndex="{TemplateBinding Path=SelectedIndex}"
Transition="{TemplateBinding Transition}"/>
<Border Grid.Column="1">
<ScrollViewer>
<TabStrip Items="{TemplateBinding Items}"
SelectedIndex="{TemplateBinding Path=SelectedIndex, Mode=TwoWay}">
<TabStrip.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</TabStrip.ItemsPanel>
</TabStrip>
</ScrollViewer>
</Border>
</Grid>
</ControlTemplate>
</Setter>
</Style>
</Styles>
Loading…
Cancel
Save