UWP Development, Property Elements and Attached Properties

Hello! In this tutorial, we will take a closer look at two important concepts in Windows UWP (Universal Windows Platform) development: Dependency Properties and Attached Properties. UWP is a powerful platform that supports the development of applications that can run on a variety of devices. Dependency Properties and Attached Properties play a crucial role in setting and controlling the properties of UI elements within this platform.

1. What are Dependency Properties?

Dependency Properties are a concept introduced in WPF (Windows Presentation Foundation) that is also adopted in UWP. Dependency Properties have the following characteristics:

  • They can define the properties of UI elements.
  • They can track changes to property values and update the UI based on those changes.
  • They support data binding and styling features.

1.1 Structure of Dependency Properties

To define a Dependency Property, you need to create a class that inherits from the DependencyObject class and register the necessary Dependency Properties. For this, you will use the DependencyProperty.Register method.

Example: Defining a Custom Dependency Property

using Windows.UI.Xaml;

public class MyCustomControl : Control
{
    // Defining Dependency Property
    public static readonly DependencyProperty MyPropertyProperty =
        DependencyProperty.Register(
            "MyProperty",
            typeof(string),
            typeof(MyCustomControl),
            new PropertyMetadata(default(string)));

    // CLR Property Wrapper
    public string MyProperty
    {
        get { return (string)GetValue(MyPropertyProperty); }
        set { SetValue(MyPropertyProperty, value); }
    }
}

The code above defines a custom control named MyCustomControl and registers a Dependency Property called MyProperty.

1.2 Characteristics of Dependency Properties

Dependency Properties have various characteristics. By default, here are some of them:

  • Default Value: You can set the default value of a property.
  • Change Notification: You can receive notifications when the property value changes.
  • Data Binding: You can bind properties to a data context.

2. What are Attached Properties?

Attached Properties are properties used to provide additional properties to specific objects. These properties are typically used in other classes and are very useful in design scenarios. They are useful for providing directional information (e.g., layout information regarding specific UI elements).

2.1 Structure of Attached Properties

The method of defining Attached Properties is similar to that of defining Dependency Properties. They can be defined accordingly.

Example: Defining an Attached Property

public static class MyAttachedProperties
{
    public static readonly DependencyProperty IsMyPropertyProperty =
        DependencyProperty.RegisterAttached(
            "IsMyProperty",
            typeof(bool),
            typeof(MyAttachedProperties),
            new PropertyMetadata(false));

    public static void SetIsMyProperty(UIElement element, bool value)
    {
        element.SetValue(IsMyPropertyProperty, value);
    }

    public static bool GetIsMyProperty(UIElement element)
    {
        return (bool)element.GetValue(IsMyPropertyProperty);
    }
}

The code above defines an Attached Property named IsMyProperty in the MyAttachedProperties class. Attached Properties can be applied to UI elements of other classes from outside the class.

2.2 Use of Attached Properties

Attached Properties are primarily useful in the following situations:

  • A parent element can pass data to child elements.
  • You can dynamically add properties to a specific UI element as needed.
  • They are useful for layout and style adjustments.

3. Comparison of Dependency Properties and Attached Properties

Dependency Properties are properties defined within a class, while Attached Properties are properties that can be set externally on specific UI elements. Dependency Properties can be directly used in instances of the class, whereas Attached Properties are primarily used as additional properties for UI elements.

4. Examples of Dependency Properties and Attached Properties

Below is a simple example of using both Dependency Properties and Attached Properties together.

Example: Combining Custom Control with Attached Properties

public class MyCustomControl : Control
{
    // Defining Dependency Property
    public static readonly DependencyProperty MyPropertyProperty =
        DependencyProperty.Register(
            "MyProperty",
            typeof(string),
            typeof(MyCustomControl),
            new PropertyMetadata(default(string)));

    public string MyProperty
    {
        get { return (string)GetValue(MyPropertyProperty); }
        set { SetValue(MyPropertyProperty, value); }
    }
}

public static class MyAttachedProperties
{
    public static readonly DependencyProperty IsMyPropertyProperty =
        DependencyProperty.RegisterAttached(
            "IsMyProperty",
            typeof(bool),
            typeof(MyAttachedProperties),
            new PropertyMetadata(false));

    public static void SetIsMyProperty(UIElement element, bool value)
    {
        element.SetValue(IsMyPropertyProperty, value);
    }

    public static bool GetIsMyProperty(UIElement element)
    {
        return (bool)element.GetValue(IsMyPropertyProperty);
    }
}

5. Practical Example: Building a Simple UWP App

Now, let’s apply the above Dependency Properties and Attached Properties to a simple UWP application.

5.1 Writing the XAML File

<Page
    x:Class="MyApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:MyApp"
    xmlns:controls="using:MyApp.Controls">

    <Grid>
        <controls:MyCustomControl MyProperty="Hello, World!" 
            local:MyAttachedProperties.IsMyProperty="True" />
    </Grid>
</Page>

5.2 Writing the C# Code

using Windows.UI.Xaml.Controls;

namespace MyApp
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }
    }
}

Conclusion

In this tutorial, we explored the concepts of Dependency Properties and Attached Properties in UWP development. Dependency Properties manage the properties of custom controls, while Attached Properties are used to dynamically add additional properties to UI elements. Properly leveraging these two concepts can greatly assist in developing large-scale applications.

Now you have the foundation to enrich your UWP applications using Dependency Properties and Attached Properties. Furthermore, apply these concepts to create applications with various features!