packages/MaterialDesignThemes.2.5.1/src/net45/Transitions/IndexedItemOffsetMultiplierExtension.cs
(开头部分) 3KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Markup;
using System.Windows.Media;
namespace MaterialDesignThemes.Wpf.Transitions
{
/// <summary>
/// Multiplies a time span unit by the index of an item in a list.
/// </summary>
/// <remarks>
/// Example usage is for a <see cref="TransitioningContent"/> to have a <see cref="TransitionEffect.OffsetTime" />
/// time delayed according to position in a list, so cascading animations can occur.
/// </remarks>
[MarkupExtensionReturnType(typeof(TimeSpan))]
public class IndexedItemOffsetMultiplierExtension : MarkupExtension
{
public IndexedItemOffsetMultiplierExtension(TimeSpan unit)
{
Unit = unit;
}
[ConstructorArgument("unit")]
public TimeSpan Unit { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
var provideValueTarget = serviceProvider.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget;
if (provideValueTarget == null) return TimeSpan.Zero;
if (provideValueTarget.TargetObject != null &&
provideValueTarget.TargetObject.GetType().FullName == "System.Windows.SharedDp")
//we are inside a template, return this, so we can re-evaluate later...
return this;
var element = provideValueTarget?.TargetObject as DependencyObject;
if (element == null) return TimeSpan.Zero;
var itemsControl = ItemsControl.ItemsControlFromItemContainer(element);
if (itemsControl == null)
{
var ancestor = element;
while (ancestor != null && itemsControl == null)
{
ancestor = VisualTreeHelper.GetParent(ancestor);
itemsControl = ItemsControl.ItemsControlFromItemContainer(ancestor);
}
}
if (itemsControl == null) return TimeSpan.Zero;
var isOwnContainer = itemsControl.IsItemItsOwnContainer(element);
var container = isOwnContainer
? element
: itemsControl.ItemContainerGenerator.ContainerFromItem(element);
if (container == null)
{
var dataContext = (element as FrameworkElement)?.DataContext;
if (dataContext != null)
container = itemsControl.ItemContainerGenerator.ContainerFromItem(dataContext);
后面还有 23 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。