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 new Deck
{ {
Name = "deck", Name = "deck",
DataTemplates = new DataTemplates MemberSelector = control.ContentSelector,
{
new DataTemplate<TabItem>(x => (Control)control.MaterializeDataTemplate(x.Content)),
},
[~Deck.TransitionProperty] = control[~TabControl.TransitionProperty], [~Deck.TransitionProperty] = control[~TabControl.TransitionProperty],
[!ItemsControl.ItemsProperty] = control[!ItemsControl.ItemsProperty], [!Deck.ItemsProperty] = control[!ItemsControl.ItemsProperty],
[!SelectingItemsControl.SelectedItemProperty] = control[!SelectingItemsControl.SelectedItemProperty], [!Deck.SelectedItemProperty] = control[!SelectingItemsControl.SelectedItemProperty],
[Grid.ColumnProperty] = 1, [Grid.ColumnProperty] = 1,
} }
} }

31
src/Perspex.Controls/TabControl.cs

@ -4,6 +4,7 @@
using Perspex.Animation; using Perspex.Animation;
using Perspex.Controls.Presenters; using Perspex.Controls.Presenters;
using Perspex.Controls.Primitives; using Perspex.Controls.Primitives;
using Perspex.Controls.Templates;
namespace Perspex.Controls namespace Perspex.Controls
{ {
@ -24,6 +25,9 @@ namespace Perspex.Controls
public static readonly PerspexProperty<IPageTransition> TransitionProperty = public static readonly PerspexProperty<IPageTransition> TransitionProperty =
Deck.TransitionProperty.AddOwner<TabControl>(); Deck.TransitionProperty.AddOwner<TabControl>();
private static readonly IMemberSelector s_contentSelector =
new FuncMemberSelector<object, object>(SelectContent);
/// <summary> /// <summary>
/// Initializes static members of the <see cref="TabControl"/> class. /// Initializes static members of the <see cref="TabControl"/> class.
/// </summary> /// </summary>
@ -34,6 +38,14 @@ namespace Perspex.Controls
SelectedIndexProperty.Changed.AddClassHandler<TabControl>(x => x.SelectedIndexChanged); 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> /// <summary>
/// Gets the <see cref="SelectingItemsControl.SelectedItem"/> as a <see cref="TabItem"/>. /// Gets the <see cref="SelectingItemsControl.SelectedItem"/> as a <see cref="TabItem"/>.
/// </summary> /// </summary>
@ -65,6 +77,25 @@ namespace Perspex.Controls
return control is DeckPresenter; 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> /// <summary>
/// Called when the <see cref="SelectingItemsControl.SelectedIndex"/> property changes. /// Called when the <see cref="SelectingItemsControl.SelectedIndex"/> property changes.
/// </summary> /// </summary>

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

@ -29,7 +29,7 @@ namespace Perspex.Controls.Templates
/// <returns>The selected member.</returns> /// <returns>The selected member.</returns>
public object Select(object o) 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", Name = "deck",
Template = new ControlTemplate<Deck>(CreateDeckTemplate), Template = new ControlTemplate<Deck>(CreateDeckTemplate),
MemberSelector = new FuncMemberSelector<TabItem, object>(x => x.Content), MemberSelector = parent.ContentSelector,
[!ItemsControl.ItemsProperty] = parent[!ItemsControl.ItemsProperty], [!ItemsControl.ItemsProperty] = parent[!ItemsControl.ItemsProperty],
[!SelectingItemsControl.SelectedItemProperty] = parent[!SelectingItemsControl.SelectedItemProperty], [!SelectingItemsControl.SelectedItemProperty] = parent[!SelectingItemsControl.SelectedItemProperty],
} }

Loading…
Cancel
Save