12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Markup;
- namespace FWindSoft.Wpf
- {
- public class LocalName : DependencyObject
- {
- //子元素继承属性
- public static readonly DependencyProperty BaseNameProperty =
- DependencyProperty.RegisterAttached("BaseName", typeof(string),
- typeof(LocalName),
- new FrameworkPropertyMetadata(null,
- FrameworkPropertyMetadataOptions.Inherits));
- public static string GetBaseName(FrameworkElement obj)
- {
- return (string) obj.GetValue(BaseNameProperty);
- }
- public static void SetBaseName(FrameworkElement obj, string value)
- {
- obj.SetValue(BaseNameProperty, value);
- }
- }
- public class LocalNameExtension : MarkupExtension
- {
- private string m_Qualifier;
- public LocalNameExtension()
- {
- }
- public LocalNameExtension(string qualifier)
- {
- m_Qualifier = qualifier;
- }
- public override object ProvideValue(IServiceProvider serviceProvider)
- {
- var targetProvider = (IProvideValueTarget)
- serviceProvider.GetService(typeof(IProvideValueTarget));
- // MarkupExtension 在样式模板中,返回 this 以延迟提供值。
- //if (service.TargetObject.GetType().Name.EndsWith("SharedDp")) return this;
- // 如果不是 FrameworkElement,那么返回 this 以延迟提供值。
- FrameworkElement target = targetProvider.TargetObject as FrameworkElement;
- if (target==null) return this;
- //var target = (FrameworkElement)targetProvider.TargetObject;
- string name = LocalName.GetBaseName(target);
- if (m_Qualifier != null) { name += m_Qualifier; }
- return name;
- }
- }
- }
|