以编程方式修改自定义UserControl

本文关键字:自定义 UserControl 修改 方式 编程 | 更新日期: 2023-09-27 17:53:12

我让这个用户控制:

<UserControl
    x:Class="ScannerApp.Custom_Controls.LocationAndQuantity"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:ScannerApp.Custom_Controls"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="20">
    <Grid Background="White">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Border x:Name="border" Background="{Binding Color}">
            <TextBlock x:Name="locationTxt" Text="{Binding Location}" HorizontalAlignment="Center"></TextBlock>
        </Border>
        <TextBlock x:Name="quantityTxt" Text="{Binding Quantity}" Grid.Column="1" HorizontalAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Top"/>
    </Grid>
</UserControl>

我需要能够修改边框背景颜色和TextBlocks中的文本。但是,如果我创建了一个新的自定义控件,我将无法设置它。

我试过了:

LocationAndQuantity customControl = new LocationAndQuantity(Color = "red", Location = "A-01-01", Quantity = "23");

或:

LocationAndQuantity customControl = new LocationAndQuantity();
customContrl.border = ... //this just gives me error right away.

以编程方式修改自定义UserControl

您可以通过以下方式定义属性来绑定用户控件

public partial class LocationAndQuantity : UserControl
{
    public Brush Color { get; set; }
    public string  Location { get; set; }
    public int Quantity { get; set; }
    //The class must have default constructor
    public LocationAndQuantity()
    {
        this.InitializeComponent();
    }
    public LocationAndQuantity(string c,string l, int q)
    {
        this.Color = new SolidColorBrush((Color)ColorConverter.ConvertFromString(c));
        this.Location = l;
        this.Quantity = q;
        InitializeComponent();
        DataContext = this;            
    }
}

使用:

LocationAndQuantity customControl = new LocationAndQuantity("red", "A-01-01", 10);
//then add to stackpannel for example
stackPanel.Children.Add(customControl);