将属性添加到现有Control(ComboBox或ListView)

时间:2017-08-22 09:56:04

标签: c# xaml uwp

我只是设计'表格生成器'。 我正在从以前生成的xaml文件加载UI(通过XamlReader) 我有例如:

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

我想要实现的是在xaml文件中保存一些额外的文本信息,XamlReader不会将其加载到UI。 所以我想为Control添加一些额外的字符串属性,如'AddtionalInfo'。

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

我试过通过创建自定义控件来做到这一点,但是XamlReder不想读它。 也许有人有更好的主意?

2 个答案:

答案 0 :(得分:2)

已经有专门为此设计的财产:

  

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

的成员      

摘要:获取或设置可用于的任意对象值   存储有关此对象的自定义信息。

只需使用此属性即可在任何FrameworkElement上存储您想要的任何数据。

答案 1 :(得分:1)

您可以使用附加财产: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);
    }
}

财产的用法:

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