简体   繁体   中英

Modify custom UserControl programmatically

I have made this user control:

<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>

I need to be able to modify the border Background color and text in the TextBlocks. However, if I create a new Custom control, I am not able to set it anyhow.

I tried this:

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

or this:

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

You can bind user control by defining properties following way

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;            
    }
}

Use:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM