如何在xaml中的继承控件中设置自定义属性

时间:2017-08-02 15:48:28

标签: c# xaml inheritance uwp custom-controls

我构建了一个基于ListView的自定义控件TabularListView,它带有一个新的Property,一个ObservableCollection TabularListViewHeaderColumn。

TabularListView:

class TabularListView : ListView
{
    public TabularListView()
    {
        Columns = new ObservableCollection<TabularListViewHeaderColumn>();
    }
    public ObservableCollection<TabularListViewHeaderColumn> Columns
    {
        get { return (ObservableCollection<TabularListViewHeaderColumn>)GetValue(ColumnsProperty); }
        set { SetValue(ColumnsProperty, value); }
    }
    public static readonly DependencyProperty ColumnsProperty =
        DependencyProperty.Register("Columns", typeof(ObservableCollection<TabularListViewHeaderColumn>), typeof(TabularListView), new PropertyMetadata(new ObservableCollection<TabularListViewHeaderColumn>()));
}

TabularListViewHeaderColumn:

class TabularListViewHeaderColumn : ContentControl
{
    public string Title
    {
        get { return (string)GetValue(TitleProperty); }
        set { SetValue(TitleProperty, value); }
    }
    public static readonly DependencyProperty TitleProperty =
        DependencyProperty.Register("Title", typeof(string), typeof(TabularListViewHeaderColumn), new PropertyMetadata(string.Empty));

    public string MappingName
    {
        get { return (string)GetValue(MappingNameProperty); }
        set { SetValue(MappingNameProperty, value); }
    }
    public static readonly DependencyProperty MappingNameProperty =
        DependencyProperty.Register("MappingName", typeof(string), typeof(TabularListViewHeaderColumn), new PropertyMetadata(string.Empty));
}

我尝试使用它,如下所示,直接在XAML中设置TabularListViewHeaderColumns:

<Controls:TabularListView>
    <Controls:TabularListView.Header>
        <ItemsControl>
            <DataTemplate>
                <Button Content="{Binding Title}" Width="{Binding Width}"
                            FontWeight="Bold"/>
            </DataTemplate>
        </ItemsControl>
    </Controls:TabularListView.Header>
    <Controls:TabularListView.Columns>
        <Controls:TabularListViewHeaderColumn Title="Test" MappingName="Inactive" Width="60"/>
        <Controls:TabularListViewHeaderColumn Title="Articlenumber" MappingName="DeviceType.ArticleNo" Width="170"/>
        <Controls:TabularListViewHeaderColumn Title="Serialnumber" MappingName="SerialNo" Width="170"/>
        <Controls:TabularListViewHeaderColumn Title="Inventorynumber" MappingName="EndCustNo" Width="170"/>
        <Controls:TabularListViewHeaderColumn Title="Description" MappingName="DeviceType.Description1" Width="300"/>
    </Controls:TabularListView.Columns>

</Controls:TabularListView>

通常在创建常规自定义控件时,如本例https://social.technet.microsoft.com/wiki/contents/articles/32828.uwp-how-to-create-and-use-custom-control.aspx,我需要将受尊重的属性绑定到DependencyProperty,但由于我只从ListView继承并且没有任何Xaml,所以我很安静困惑如何这样做。

0 个答案:

没有答案