如何添加自定义属性,如x:Name =" value"?

时间:2014-04-30 17:03:12

标签: c# wpf xaml

嗨,大家好我厌倦了在xaml中制作我的自定义属性以进行所有控制

// ... 
<TextBlock x:Name="tblck1"/>
//...

我想创建一个像这样的人:

//...
<TextBlock g:Language="EN"/>
//...

我厌倦了一个静态类和MarkupExtension,但它似乎不是正确的方法! 请帮我。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

首先,我不明白为什么你想要一个自定义前缀g:来定义Language属性。 你有两种选择来实现你想要的目标。

来自msdn的

依赖属性

  

依赖属性的目的是提供一种计算方法   基于其他输入值的属性值。这些   其他输入可能包括系统属性,如主题和用户   偏好,及时财产确定机制,如   数据绑定和动画/故事板,多用途模板等   作为资源和样式,或通过父子知道的值   与元素树中其他元素的关系

来自msdn的

附加属性

  

附加属性是XAML定义的概念。附加属性旨在用作可在任何对象上设置的全局属性类型。在Windows Presentation Foundation(WPF)中,附加属性通常被定义为依赖属性的一种特殊形式,它没有传统的属性“wrapper”。

你指定你想要这样的东西

<TextBlock g:Language="EN"/>

如果你想让它看起来像这样

<TextBlock Language="EN"/>

然后你没有其他办法,只能创建一个源自TextBlock并创建Dependency property的自定义控件。

所以它最终会得到像这样的东西

 <controls:CustomTextBlock Language="EN"/>

您拥有的另一个选择是创建attach property,最终看起来像

<TextBlock attachProperties:ClassToDefineAttachProperty.Language="EN"/>

选择取决于你。

我宁愿选择attached properties,因为在涉及Language属性等问题时,更容易扩展现有的类。

答案 1 :(得分:0)

谢谢大家,我完成了这段代码,它完美无缺:

public class DesignMode : FrameworkElement
    {
        public static GAppLanguage GetDesignLanguage(DependencyObject obj)
        {
            return (GAppLanguage)obj.GetValue(DesignLanguageProperty);
        }

        public static void SetDesignLanguage(DependencyObject obj, GAppLanguage value)
        {
            obj.SetValue(DesignLanguageProperty, value);
        }

        public static readonly DependencyProperty DesignLanguageProperty =
            DependencyProperty.RegisterAttached("DesignLanguage", typeof(GAppLanguage), typeof(DesignMode), new PropertyMetadata(GAppLanguage.EN, new PropertyChangedCallback(DesingLanguageChanged)));

        private static void DesingLanguageChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            DesignMode.DesignLanguage = (GAppLanguage) Enum.Parse(typeof(GAppLanguage),e.NewValue.ToString());
        }

        public static GAppLanguage DesignLanguage { get; set; }
    }

我在我的xaml中使用它:

<TextBlock  Text="{GtringResource gtringtest}" d:DesignMode.DesignLanguage="EN" />