Browse Source

Merge pull request #2218 from AvaloniaUI/fixes/2191-tabcontrol-contentcontrolmixin

Register TabControl with ContentControlMixin.
pull/2251/head
Steven Kirk 8 years ago
committed by GitHub
parent
commit
2451f3b30f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      samples/ControlCatalog/MainView.xaml
  2. 2
      samples/ControlCatalog/SideBar.xaml
  3. 7
      src/Avalonia.Controls/TabControl.cs
  4. 2
      src/Avalonia.Themes.Default/TabControl.xaml
  5. 50
      tests/Avalonia.Controls.UnitTests/TabControlTests.cs

2
samples/ControlCatalog/MainView.xaml

@ -32,10 +32,10 @@
<TabItem Header="ProgressBar"><pages:ProgressBarPage/></TabItem> <TabItem Header="ProgressBar"><pages:ProgressBarPage/></TabItem>
<TabItem Header="RadioButton"><pages:RadioButtonPage/></TabItem> <TabItem Header="RadioButton"><pages:RadioButtonPage/></TabItem>
<TabItem Header="Slider"><pages:SliderPage/></TabItem> <TabItem Header="Slider"><pages:SliderPage/></TabItem>
<TabItem Header="TabControl"><pages:TabControlPage/></TabItem>
<TabItem Header="TextBox"><pages:TextBoxPage/></TabItem> <TabItem Header="TextBox"><pages:TextBoxPage/></TabItem>
<TabItem Header="ToolTip"><pages:ToolTipPage/></TabItem> <TabItem Header="ToolTip"><pages:ToolTipPage/></TabItem>
<TabItem Header="TreeView"><pages:TreeViewPage/></TabItem> <TabItem Header="TreeView"><pages:TreeViewPage/></TabItem>
<TabItem Header="TabControl"><pages:TabControlPage/></TabItem>
<TabItem Header="Viewbox"><pages:ViewboxPage/></TabItem> <TabItem Header="Viewbox"><pages:ViewboxPage/></TabItem>
</TabControl> </TabControl>
</Grid> </Grid>

2
samples/ControlCatalog/SideBar.xaml

@ -26,7 +26,7 @@
</ItemsPresenter> </ItemsPresenter>
</ScrollViewer> </ScrollViewer>
<ContentPresenter <ContentPresenter
Name="PART_Content" Name="PART_SelectedContentHost"
Margin="{TemplateBinding Padding}" Margin="{TemplateBinding Padding}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"

7
src/Avalonia.Controls/TabControl.cs

@ -2,6 +2,7 @@
// Licensed under the MIT license. See licence.md file in the project root for full license information. // Licensed under the MIT license. See licence.md file in the project root for full license information.
using Avalonia.Controls.Generators; using Avalonia.Controls.Generators;
using Avalonia.Controls.Mixins;
using Avalonia.Controls.Presenters; using Avalonia.Controls.Presenters;
using Avalonia.Controls.Primitives; using Avalonia.Controls.Primitives;
using Avalonia.Controls.Templates; using Avalonia.Controls.Templates;
@ -65,6 +66,10 @@ namespace Avalonia.Controls
SelectionModeProperty.OverrideDefaultValue<TabControl>(SelectionMode.AlwaysSelected); SelectionModeProperty.OverrideDefaultValue<TabControl>(SelectionMode.AlwaysSelected);
ItemsPanelProperty.OverrideDefaultValue<TabControl>(DefaultPanel); ItemsPanelProperty.OverrideDefaultValue<TabControl>(DefaultPanel);
AffectsMeasure<TabControl>(TabStripPlacementProperty); AffectsMeasure<TabControl>(TabStripPlacementProperty);
ContentControlMixin.Attach<TabControl>(
SelectedContentProperty,
x => x.LogicalChildren,
"PART_SelectedContentHost");
} }
/// <summary> /// <summary>
@ -142,7 +147,7 @@ namespace Avalonia.Controls
ItemsPresenterPart = e.NameScope.Get<ItemsPresenter>("PART_ItemsPresenter"); ItemsPresenterPart = e.NameScope.Get<ItemsPresenter>("PART_ItemsPresenter");
ContentPart = e.NameScope.Get<ContentPresenter>("PART_Content"); ContentPart = e.NameScope.Get<ContentPresenter>("PART_SelectedContentHost");
} }
/// <inheritdoc/> /// <inheritdoc/>

2
src/Avalonia.Themes.Default/TabControl.xaml

@ -18,7 +18,7 @@
MemberSelector="{TemplateBinding MemberSelector}" > MemberSelector="{TemplateBinding MemberSelector}" >
</ItemsPresenter> </ItemsPresenter>
<ContentPresenter <ContentPresenter
Name="PART_Content" Name="PART_SelectedContentHost"
Margin="{TemplateBinding Padding}" Margin="{TemplateBinding Padding}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"

50
tests/Avalonia.Controls.UnitTests/TabControlTests.cs

@ -267,26 +267,46 @@ namespace Avalonia.Controls.UnitTests
Assert.Null(page.Content); Assert.Null(page.Content);
} }
[Fact]
public void DataTemplate_Created_Content_Should_Be_Logical_Child_After_ApplyTemplate()
{
TabControl target = new TabControl
{
Template = TabControlTemplate(),
ContentTemplate = new FuncDataTemplate<string>(x =>
new TextBlock { Tag = "bar", Text = x }),
Items = new[] { "Foo" },
};
ApplyTemplate(target);
target.ContentPart.UpdateChild();
var content = Assert.IsType<TextBlock>(target.ContentPart.Child);
Assert.Equal("bar", content.Tag);
Assert.Same(target, content.GetLogicalParent());
Assert.Single(target.GetLogicalChildren(), content);
}
private IControlTemplate TabControlTemplate() private IControlTemplate TabControlTemplate()
{ {
return new FuncControlTemplate<TabControl>(parent => return new FuncControlTemplate<TabControl>(parent =>
new StackPanel new StackPanel
{ {
Children = { Children =
new ItemsPresenter {
{ new ItemsPresenter
Name = "PART_ItemsPresenter", {
[!TabStrip.ItemsProperty] = parent[!TabControl.ItemsProperty], Name = "PART_ItemsPresenter",
[!TabStrip.ItemTemplateProperty] = parent[!TabControl.ItemTemplateProperty], [!TabStrip.ItemsProperty] = parent[!TabControl.ItemsProperty],
}, [!TabStrip.ItemTemplateProperty] = parent[!TabControl.ItemTemplateProperty],
new ContentPresenter },
{ new ContentPresenter
Name = "PART_Content", {
[!ContentPresenter.ContentProperty] = parent[!TabControl.SelectedContentProperty], Name = "PART_SelectedContentHost",
[!ContentPresenter.ContentTemplateProperty] = parent[!TabControl.SelectedContentTemplateProperty], [!ContentPresenter.ContentProperty] = parent[!TabControl.SelectedContentProperty],
} [!ContentPresenter.ContentTemplateProperty] = parent[!TabControl.SelectedContentTemplateProperty],
} }
}
}); });
} }

Loading…
Cancel
Save