Inherit DependencyProperties

本文关键字:DependencyProperties Inherit | 更新日期: 2023-09-27 17:49:26

我已经创建了几个UserControls,如HeaderedDatePicker

这个UserControl的XAML看起来像:

<UserControl x:Class="Book.CustomControls.HeaderedDatePicker"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             DataContext="{Binding RelativeSource={RelativeSource Self}}"
             Width="200" Height="50">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0" Margin="2,2" VerticalAlignment="Center" Text="{Binding Header}" FontWeight="{Binding HeaderFontWeight}"/>
        <DatePicker Grid.Row="1" Margin="2,2" VerticalAlignment="Center" SelectedDate="{Binding Date, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
    </Grid>
</UserControl>

已注册DependencyProperty s的代码延迟为:

public partial class HeaderedDatePicker : UserControl
{
    public HeaderedDatePicker()
    {
        this.InitializeComponent();
        this.HeaderFontWeight = FontWeights.Normal;
        this.Date = DateTime.Now;
    }
    public static readonly DependencyProperty HeaderProperty = DependencyProperty.Register("Header", typeof(string), typeof(HeaderedDatePicker));
    public static readonly DependencyProperty HeaderFontWeightProperty = DependencyProperty.Register("HeaderFontWeight", typeof(FontWeight), typeof(HeaderedDatePicker));
    public static readonly DependencyProperty DateProperty = DependencyProperty.Register("Date", typeof(DateTime), typeof(HeaderedDatePicker));
    public string Header
    {
        get { return (string)GetValue(HeaderProperty); }
        set { SetValue(HeaderProperty, value); }
    }
    public FontWeight HeaderFontWeight
    {
        get { return (FontWeight)GetValue(HeaderFontWeightProperty); }
        set { SetValue(HeaderFontWeightProperty, value); }
    }
    public DateTime Date
    {
        get { return (DateTime)GetValue(DateProperty); }
        set { SetValue(DateProperty, value); }
    }
}

一切正常。现在我想创建另一个HeaderedControl像HeaderedComboBox之类的。我现在的问题是:

我是否必须在每个代码后文件中编写HeaderProperty和HeaderFontWeightProperty,或者有一种方法可以在基类中做到这一点?

我试图创建一个基类,其中的属性注册,但在代码背后的HeaderedDatePicker我不能从我的类

Inherit DependencyProperties

继承
public class main : UserControl
{
    public static readonly DependencyProperty HeaderProperty = DependencyProperty.Register("Header", typeof(string), typeof(main));
    public static readonly DependencyProperty HeaderFontWeightProperty = DependencyProperty.Register("HeaderFontWeight", typeof(FontWeight), typeof(main));
    public static readonly DependencyProperty DateProperty = DependencyProperty.Register("Date", typeof(DateTime), typeof(main));
    public string Header
    {
        get { return (string)GetValue(HeaderProperty); }
        set { SetValue(HeaderProperty, value); }
    }
    public FontWeight HeaderFontWeight
    {
        get { return (FontWeight)GetValue(HeaderFontWeightProperty); }
        set { SetValue(HeaderFontWeightProperty, value); }
    }
    public DateTime Date
    {
        get { return (DateTime)GetValue(DateProperty); }
        set { SetValue(DateProperty, value); }
    }
}

那么在每个UserControl中,你应该从之前声明的main.

    public partial class HeaderedComboBox : main
{
    public HeaderedComboBox()
    {
        this.InitializeComponent();
        this.DataContext = this;
    } 
}
最后

<local:main x:Class="WpfApplication5.HeaderedComboBox"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local ="clr-namespace:WpfApplication5"
         mc:Ignorable="d" 
         Width="200" Height="50">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <TextBlock Grid.Row="0" Margin="2,2" VerticalAlignment="Center" Text="{Binding Header}" FontWeight="{Binding HeaderFontWeight}"/>
    <ComboBox Grid.Row="1" Margin="2,2" VerticalAlignment="Center" ItemsSource="{Binding ItemsSource, UpdateSourceTrigger=PropertyChanged}"
              SelectedItem="{Binding SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>

可以注册附加属性。请看这个链接。附加属性可用于任何依赖对象。

相关文章:
  • 没有找到相关文章