Browse Source

Make the TestApplication work again.

Expose the tab item content selector from TabControl, and make
FuncMemberSelector return default(T) if the parameter is of the wrong
type.
pull/209/head
Steven Kirk 11 years ago
parent
commit
ad70cf874c
  1. 9
      samples/TestApplication/GalleryStyle.cs
  2. 31
      src/Perspex.Controls/TabControl.cs
  3. 2
      src/Perspex.Controls/Templates/FuncMemberSelector.cs
  4. 2
      tests/Perspex.Controls.UnitTests/TabControlTests.cs

9
samples/TestApplication/GalleryStyle.cs

@ -107,13 +107,10 @@ namespace TestApplication
new Deck
{
Name = "deck",
DataTemplates = new DataTemplates
{
new DataTemplate<TabItem>(x => (Control)control.MaterializeDataTemplate(x.Content)),
},
MemberSelector = control.ContentSelector,
[~Deck.TransitionProperty] = control[~TabControl.TransitionProperty],
[!ItemsControl.ItemsProperty] = control[!ItemsControl.ItemsProperty],
[!SelectingItemsControl.SelectedItemProperty] = control[!SelectingItemsControl.SelectedItemProperty],
[!Deck.ItemsProperty] = control[!ItemsControl.ItemsProperty],
[!Deck.SelectedItemProperty] = control[!SelectingItemsControl.SelectedItemProperty],
[Grid.ColumnProperty] = 1,
}
}

31
src/Perspex.Controls/TabControl.cs

@ -4,6 +4,7 @@
using Perspex.Animation;
using Perspex.Controls.Presenters;
using Perspex.Controls.Primitives;
using Perspex.Controls.Templates;
namespace Perspex.Controls
{
@ -24,6 +25,9 @@ namespace Perspex.Controls
public static readonly PerspexProperty<IPageTransition> TransitionProperty =
Deck.TransitionProperty.AddOwner<TabControl>();
private static readonly IMemberSelector s_contentSelector =
new FuncMemberSelector<object, object>(SelectContent);
/// <summary>
/// Initializes static members of the <see cref="TabControl"/> class.
/// </summary>
@ -34,6 +38,14 @@ namespace Perspex.Controls
SelectedIndexProperty.Changed.AddClassHandler<TabControl>(x => x.SelectedIndexChanged);
}
/// <summary>
/// Gets an <see cref="IMemberSelector"/> that selects the content of a <see cref="TabItem"/>.
/// </summary>
public IMemberSelector ContentSelector
{
get { return s_contentSelector; }
}
/// <summary>
/// Gets the <see cref="SelectingItemsControl.SelectedItem"/> as a <see cref="TabItem"/>.
/// </summary>
@ -65,6 +77,25 @@ namespace Perspex.Controls
return control is DeckPresenter;
}
/// <summary>
/// Selects the content of a tab item.
/// </summary>
/// <param name="o">The tab item.</param>
/// <returns>The content.</returns>
private static object SelectContent(object o)
{
var content = o as IContentControl;
if (content != null)
{
return content.Content;
}
else
{
return o;
}
}
/// <summary>
/// Called when the <see cref="SelectingItemsControl.SelectedIndex"/> property changes.
/// </summary>

2
src/Perspex.Controls/Templates/FuncMemberSelector.cs

@ -29,7 +29,7 @@ namespace Perspex.Controls.Templates
/// <returns>The selected member.</returns>
public object Select(object o)
{
return (o is TObject) ? _selector((TObject)o) : o;
return (o is TObject) ? _selector((TObject)o) : default(TMember);
}
}
}

2
tests/Perspex.Controls.UnitTests/TabControlTests.cs

@ -187,7 +187,7 @@ namespace Perspex.Controls.UnitTests
{
Name = "deck",
Template = new ControlTemplate<Deck>(CreateDeckTemplate),
MemberSelector = new FuncMemberSelector<TabItem, object>(x => x.Content),
MemberSelector = parent.ContentSelector,
[!ItemsControl.ItemsProperty] = parent[!ItemsControl.ItemsProperty],
[!SelectingItemsControl.SelectedItemProperty] = parent[!SelectingItemsControl.SelectedItemProperty],
}

Loading…
Cancel
Save