<UserControl x:Class="Views.Controls.FieldLabel" 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" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800" x:Name="Control" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> <Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> <Grid.ColumnDefinitions> <ColumnDefinition Width="50*" /> <ColumnDefinition Width="50*" /> </Grid.ColumnDefinitions> <StackPanel Grid.Column="0" Margin="0 5"> <Label Content="{Binding Label, ElementName=Control}" FontWeight="Bold"/> </StackPanel> <StackPanel Grid.Column="1" Margin="0 5"> <ContentPresenter Content="{Binding Editor, ElementName=Control}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> </StackPanel> </Grid> </UserControl>
using System.Windows; using System.Windows.Controls; namespace Views.Controls { public partial class FieldLabel : UserControl { public static readonly DependencyProperty LabelProperty = DependencyProperty.Register(nameof(Label), typeof(string), typeof(FieldLabel), new PropertyMetadata(null)); public string Label { get => (string)GetValue(LabelProperty); set => SetValue(LabelProperty, value); } public static readonly DependencyProperty EditorProperty = DependencyProperty.Register(nameof(Editor), typeof(Control), typeof(FieldLabel), new PropertyMetadata((Control)null)); public Control Editor { get => (Control)GetValue(EditorProperty); set => SetValue(EditorProperty, value); } public FieldLabel() { InitializeComponent(); } } }
Usage
<!-- xmlns:controls="clr-namespace:Views.Controls" --> <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <StackPanel Margin="15" Orientation="Vertical"> <controls:FieldLabel Label="MyCombobox"> <controls:FieldLabel.Editor> <ComboBox> <ComboBoxItem>Test 1</ComboBoxItem> <ComboBoxItem>Test 2</ComboBoxItem> <ComboBoxItem>Test 3</ComboBoxItem> </ComboBox> </controls:FieldLabel.Editor> </controls:FieldLabel> <controls:FieldLabel Label="MyTextbox"> <controls:FieldLabel.Editor> <TextBox Text="MyValue" /> </controls:FieldLabel.Editor> </controls:FieldLabel> <controls:FieldLabel Label="MyDatePicker"> <controls:FieldLabel.Editor> <DatePicker /> </controls:FieldLabel.Editor> </controls:FieldLabel> </StackPanel> </ScrollViewer>
454700cookie-checkC# XAML nested controls/components