12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- using System;
- using System.Collections.Generic;
- #if WinRT
- using Windows.UI.Xaml;
- #else
- using System.Windows;
- #endif
- namespace Caliburn.Micro
- {
- /// <summary>
- /// Represents a resolver that takes a control and returns it's children
- /// </summary>
- public class ChildResolver {
- private readonly Func<Type, bool> filter;
- private readonly Func<DependencyObject, IEnumerable<DependencyObject>> resolver;
- /// <summary>
- /// Creates the ChildResolver using the given anonymous methods.
- /// </summary>
- /// <param name="filter">The filter</param>
- /// <param name="resolver">The resolver</param>
- public ChildResolver(Func<Type, bool> filter, Func<DependencyObject, IEnumerable<DependencyObject>> resolver) {
- this.filter = filter;
- this.resolver = resolver;
- }
- /// <summary>
- /// Can this resolve appy to the given type.
- /// </summary>
- /// <param name="type">The visual tree type.</param>
- /// <returns>Returns true if this resolver applies.</returns>
- public bool CanResolve(Type type) {
- return filter(type);
- }
- /// <summary>
- /// The element from the visual tree for the children to resolve.
- /// </summary>
- /// <param name="obj"></param>
- /// <returns></returns>
- public IEnumerable<DependencyObject> Resolve(DependencyObject obj) {
- return resolver(obj);
- }
- }
- /// <summary>
- /// Generic strongly typed child resolver
- /// </summary>
- /// <typeparam name="T">The type to filter on</typeparam>
- public class ChildResolver<T> : ChildResolver where T : DependencyObject {
- /// <summary>
- /// Creates a
- /// </summary>
- /// <param name="resolver"></param>
- public ChildResolver(Func<T, IEnumerable<DependencyObject>> resolver) : base(
- t => typeof(T).IsAssignableFrom(t),
- o => resolver((T)o)){
-
- }
- }
- }
|