Browse Source

Added tests and control catalog demo for live changes to TabItem.ContentTemplate. The next commit will fix both.

pull/11366/head
Tom Edwards 3 years ago
parent
commit
d9b11b0725
  1. 29
      samples/ControlCatalog/Pages/TabControlPage.xaml
  2. 21
      tests/Avalonia.Controls.UnitTests/TabControlTests.cs

29
samples/ControlCatalog/Pages/TabControlPage.xaml

@ -4,7 +4,27 @@
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:viewModels="using:ControlCatalog.ViewModels" xmlns:viewModels="using:ControlCatalog.ViewModels"
x:DataType="viewModels:TabControlPageViewModel"> x:DataType="viewModels:TabControlPageViewModel">
<DockPanel> <DockPanel Classes.WithContentTemplates="{Binding IsChecked, ElementName=UseContentTemplates}">
<DockPanel.Styles>
<Style Selector="DockPanel.WithContentTemplates">
<Style Selector="^ TabItem">
<Setter Property="ContentTemplate">
<DataTemplate x:CompileBindings="False">
<Border BorderBrush="Red" BorderThickness="10">
<ContentPresenter Content="{Binding}"/>
</Border>
</DataTemplate>
</Setter>
</Style>
<Style Selector="^ TabControl">
<Setter Property="ContentTemplate">
<DataTemplate>
<TextBlock Text="This template should be overriden by each TabItem's template."/>
</DataTemplate>
</Setter>
</Style>
</Style>
</DockPanel.Styles>
<TextBlock <TextBlock
DockPanel.Dock="Top" DockPanel.Dock="Top"
Classes="h2" Classes="h2"
@ -55,14 +75,14 @@
Margin="0 16" Margin="0 16"
DisplayMemberBinding="{Binding Header, x:DataType=viewModels:TabControlPageViewModelItem}" DisplayMemberBinding="{Binding Header, x:DataType=viewModels:TabControlPageViewModelItem}"
TabStripPlacement="{Binding TabPlacement}"> TabStripPlacement="{Binding TabPlacement}">
<TabControl.ContentTemplate> <TabControl.DataTemplates>
<DataTemplate x:DataType="viewModels:TabControlPageViewModelItem"> <DataTemplate x:DataType="viewModels:TabControlPageViewModelItem">
<StackPanel Orientation="Vertical" Spacing="8"> <StackPanel Orientation="Vertical" Spacing="8">
<TextBlock Text="{Binding Text}"/> <TextBlock Text="{Binding Text}"/>
<Image Source="{Binding Image}" Width="300"/> <Image Source="{Binding Image}" Width="300"/>
</StackPanel> </StackPanel>
</DataTemplate> </DataTemplate>
</TabControl.ContentTemplate> </TabControl.DataTemplates>
<TabControl.Styles> <TabControl.Styles>
<Style Selector="TabItem" x:DataType="viewModels:TabControlPageViewModelItem"> <Style Selector="TabItem" x:DataType="viewModels:TabControlPageViewModelItem">
<Setter Property="IsEnabled" Value="{Binding IsEnabled}"/> <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>
@ -78,12 +98,13 @@
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Center"> VerticalAlignment="Center">
<TextBlock VerticalAlignment="Center">Tab Placement:</TextBlock> <TextBlock VerticalAlignment="Center">Tab Placement:</TextBlock>
<ComboBox SelectedIndex="{Binding TabPlacement, Mode=TwoWay}"> <ComboBox SelectedIndex="{Binding TabPlacement, Mode=TwoWay}" Width="100">
<ComboBoxItem>Left</ComboBoxItem> <ComboBoxItem>Left</ComboBoxItem>
<ComboBoxItem>Bottom</ComboBoxItem> <ComboBoxItem>Bottom</ComboBoxItem>
<ComboBoxItem>Right</ComboBoxItem> <ComboBoxItem>Right</ComboBoxItem>
<ComboBoxItem>Top</ComboBoxItem> <ComboBoxItem>Top</ComboBoxItem>
</ComboBox> </ComboBox>
<CheckBox Name="UseContentTemplates">Set TabItem.ContentTemplate</CheckBox>
</StackPanel> </StackPanel>
</Grid> </Grid>
</DockPanel> </DockPanel>

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

@ -375,6 +375,27 @@ namespace Avalonia.Controls.UnitTests
Assert.Single(target.GetLogicalChildren(), content); Assert.Single(target.GetLogicalChildren(), content);
} }
[Fact]
public void SelectedContentTemplate_Updates_After_New_ContentTemplate()
{
TabControl target = new TabControl
{
Template = TabControlTemplate(),
ItemsSource = new[] { "Foo" },
};
var root = new TestRoot(target);
ApplyTemplate(target);
((ContentPresenter)target.ContentPart).UpdateChild();
Assert.Equal(null, Assert.IsType<TextBlock>(target.ContentPart.Child).Tag);
target.ContentTemplate = new FuncDataTemplate<string>((x, _) =>
new TextBlock { Tag = "bar", Text = x });
Assert.Equal("bar", Assert.IsType<TextBlock>(target.ContentPart.Child).Tag);
}
[Fact] [Fact]
public void Should_Not_Propagate_DataContext_To_TabItem_Content() public void Should_Not_Propagate_DataContext_To_TabItem_Content()
{ {

Loading…
Cancel
Save