是否可以在XAML的不同UI元素中引入'自定義'屬性?也可以稍後閱讀它們,就像我們在ASP.NET中添加服務器控件的屬性一樣?如何添加自定義Silverlight XAML屬性?
我打算讀取特定的屬性並一起對它們進行操作。
是否可以在XAML的不同UI元素中引入'自定義'屬性?也可以稍後閱讀它們,就像我們在ASP.NET中添加服務器控件的屬性一樣?如何添加自定義Silverlight XAML屬性?
我打算讀取特定的屬性並一起對它們進行操作。
這聽起來像你想找到Attached Properties。
附加屬性允許您添加屬性,可以在Xaml中定義,可以「附加」到任何UIelement。然後像其他任何依賴屬性一樣retrieve them in code。
我已經完成的方式是通過創建一個繼承基本控件的新類。
例如,我有一個名爲WebTextBox的類繼承了TextBox。並且在WebTextBox裏面有一些自定義屬性和事件。通過這樣做,您將繼承TextBox控件的所有行爲。但是如果您選擇,您可以在這裏獲得創意,甚至通過覆蓋事件等來修改行爲。
無論如何,在創建類之後,您必須將項目的名稱空間添加到XAML中。事情是這樣的:
xmlns:me="clr-namespace:YourNamespace;assembly=YourAssembly"
然後你就可以添加一個WebTextBox(或者無論你怎麼稱呼它)是這樣的:
<me:WebTextBox CustomAttribute="cool stuff" />
Steve,的確是個好主意。如果不是用於附加屬性,將會使用它。謝謝回答。 – kanchirk 2010-02-03 14:46:05
以下是我傾向於採取的方法。
創建一個名爲元一個新的類文件: -
namespace SilverlightApplication1
{
public static class Meta
{
#region SomeValue
public static string GetSomeValue(DependencyObject obj)
{
return (string)obj.GetValue(SomeValueProperty);
}
public static void SetSomeValue(DependencyObject obj, string value)
{
obj.SetValue(SomeValueProperty, value);
}
public static readonly DependencyProperty SomeValueProperty =
DependencyProperty.RegisterAttached("SomeValue", typeof(string), typeof(Meta),
new PropertyMetadata(null));
#end region
#region SomeOtherValue
// Boilerplate code from above.
#end region
}
}
值現在可以在XAML附加這樣的: -
<TextBox x:Name="txt" local:Meta.SomeValue="Hello, World!" />
在代碼中的一些點這個值可以被檢索: -
string value = Meta.GetSomeValue(txt);
請注意,您不必堅持使用String
作爲屬性y的類型你幾乎可以使用任何你喜歡的類型,並且限制如果你可以將它附加到XAML中,類型必須與XAML構造對象的方式(例如需要默認構造函數)兼容。
安東尼,謝謝你的回答。我對「自定義」附加屬性有了一些新的見解。 – kanchirk 2010-02-03 14:47:02
裏德,謝謝你的回答。很高興知道它在框架內。標記爲'正確' – kanchirk 2010-02-03 14:45:26