【WPF】 自定义控件的自定义属性

发布于:2025-04-18 ⋅ 阅读:(16) ⋅ 点赞:(0)

前言

在一个页面,重复用到同一个自定义控件时,该如何对控件分别进行数据绑定呢?这时候可以赋予控件一个自定义的属性,来完成此操作。


一、自定义控件部分

为自定以控件设置 DataTag和SelectedI属性。

<UserControl x:Class="Module3DS.Components.DataList"
             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:Module3DS.Components"
             mc:Ignorable="d" 
             d:DesignHeight="250" d:DesignWidth="300">
    <GroupBox Grid.Column="0" Header="数据列表">
        <DataGrid x:Name="PrjDg" HeadersVisibility="Column" SelectedIndex="{Binding SelectedI}" ItemsSource="{Binding}" Tag="{Binding DataTag}"  ScrollViewer.VerticalScrollBarVisibility="Visible"   CanUserAddRows="False" AutoGenerateColumns="False" CanUserSortColumns="False" MouseDoubleClick="PrjDg_MouseDoubleClick">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding NUM}"  Header="一" Width="1*"  IsReadOnly="True"/>
                <DataGridTextColumn Binding="{Binding STAKEKM}" Header="二" IsReadOnly="True" Width="2*"/>
            </DataGrid.Columns>
        </DataGrid>
    </GroupBox>
</UserControl>

控件后端:

   public partial class DataList : UserControl
   {
       public DataList()
       {
           InitializeComponent();
           //
           BingdingFun("TagData", DataGrid.TagProperty);
           BingdingFun("SelectedI", DataGrid.SelectedIndexProperty);
       }

       private void BingdingFun(string name,DependencyProperty dp) {
           Binding bing = new Binding(name);
           bing.Source = this;
           bing.Mode = BindingMode.TwoWay;
           BindingOperations.SetBinding(PrjDg, dp, bing);
       }

       public static readonly DependencyProperty ISProperty = DependencyProperty.Register("TagData", typeof(Object), typeof(DataList));
       public static readonly DependencyProperty SIProperty = DependencyProperty.Register("SelectedI", typeof(int), typeof(DataList));

       public Object DataTag
       {
           get { return (Object)GetValue(ISProperty); }
           set { SetValue(ISProperty, value); }
       }

       public int SelectedI { 
           get { return (int)GetValue(SIProperty); }
           set { SetValue(SIProperty, value); }
       }
}      

二、在页面中使用

<Components:DataList Grid.Column="0" x:Name="Data3DList" DataTag="Data3D" />
<Components:DataList x:Name="IndexDataList" DataTag="DataIndex" />

如此一来,我们的控件就有了DataTag和SelectedI属性,如果你使用的MVVM,还可以做到如下这样

<Components:DataList x:Name="IndexDataList" DataTag="{Binding 属性}" SelectedI= "{Binding 属性}"/>

总结

以上就是如何为自定义控件添加自定义属性了,我们下次再见,拜拜。


网站公告

今日签到

点亮在社区的每一天
去签到