2017-08-22 64 views
0

我正在設計「表單生成器」。 我加載UI從以前生成的XAML文件(XamlReader) 我有,例如:將屬性添加到現有的控件(組合框或列表視圖)

<StackPanel Background="Gray"> 
<ComboBox Name="test" ItemsSource="{Binding}" Header="testheader" DisplayMemberPath="EventDate" /> 
</StackPanel> 

我要實現的是節省了XAML文件中一些額外的文本信息,這將不會被加載UI什麼由XamlReader。 所以我想添加一些額外的字符串屬性控制像'AddtionalInfo'。

<StackPanel Background="Gray"> 
<ComboBox Name="test" ItemsSource="{Binding}" Header="testheader" DisplayMemberPath="EventDate" AdditionalInfo="test" /> 
</StackPanel> 

我試過通過創建自定義控件來做到這一點,但是然後XamlReder不想讀取它。 也許有人有更好的主意?

回答

2

已經有專門爲這個屬性:https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/attached-properties-overview

public class SomeClass 
{ 
    public static DependencyProperty AdditionalInfoProperty = DependencyProperty.RegisterAttached("AdditionalInfo", typeof(string),typeof(SomeClass),new PropertyMetadata(null)); 
    public static void SetAdditionalInfo(DependencyObject obj, string value) 
    { 
     obj.SetValue(AdditionalInfoProperty, value); 
    } 
    public static string GetAdditionalInfo(DependencyObject obj) 
    { 
     return (string)obj.GetValue(AdditionalInfoProperty); 
    } 
} 

物業的使用

public object Tag { get; set; } 會員的Windows.UI.Xaml.FrameworkElement

摘要:獲取或設置可用於存儲有關此對象的自定義信息的任意對象值。

只需使用該屬性來存儲您想要的任何數據在任何FrameworkElement

1

你可以使用附加屬性:

<StackPanel Background="Gray"> 
     <ComboBox Name="test" ItemsSource="{Binding}" Header="testheader" DisplayMemberPath="EventDate" myNamespace:SomeClass.AdditionalInfo="test" /> 
    </StackPanel> 
+0

謝謝,但我怎樣才能使用這個屬性?我可以在xaml中使用此屬性並通過Xaml Reader加載它嗎? – user3688227

+0

我想你應該可以在XAML中聲明之後用XamlReader讀取它 – richej