Ich bin relativ neu in UWP, ein Entwickler, der Windows-Formulare benutzt. In Windows Forms, was ich versuche zu tun, würde ich ziemlich leicht durch Form Vererbung machen. UWP scheint keine Form der Layoutvererbung zu haben, es scheint, dass Sie ein UserControl entwerfen müssen, um dies zu erreichen, und platzieren Sie es auf der Seite und füllen Sie die Seite mit dem Steuerelement.UWP User Controls exponieren internes StackPanel
Ich habe ein Steuerelement, das ein 2-Spalten-Raster enthält. In der ersten Spalte habe ich ein StackPanel platziert und im Moment ist die zweite Spalte leer.
<UserControl x:Name="userControl"
x:Class="App1.BaseLayoutControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App1"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="11*"/>
<ColumnDefinition Width="29*"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0" Background="#FF0B1E70"/>
</Grid>
</UserControl>
Und der Code:
using System.ComponentModel;
using System.Runtime.CompilerServices;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using App1.Annotations;
// The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236
namespace App1
{
public sealed partial class BaseLayoutControl : INotifyPropertyChanged
{
public BaseLayoutControl()
{
InitializeComponent();
}
public StackPanel LeftStackPanel
{
get { return (StackPanel) GetValue(LeftStackPanelProperty); }
set
{
SetValue(LeftStackPanelProperty, value);
OnPropertyChanged(nameof(LeftStackPanel));
}
}
// Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...
public static readonly DependencyProperty LeftStackPanelProperty =
DependencyProperty.Register("LeftStackPanel", typeof(StackPanel), typeof(BaseLayoutControl), null);
public event PropertyChangedEventHandler PropertyChanged;
[ NotifyPropertyChangedInvocator ]
private void OnPropertyChanged([ CallerMemberName ] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Nun, was ich tun möchte, ist die Stackpanel als Eigenschaft „LeftStackPanel“ aussetzen und auch zur Design-Zeit, wo ich die Kontrolle auf der Seite platziert haben, würde ich gerne Drag & Drop von Buttons, CheckBoxen, Text etc. in das StackPanel im Control. Außerdem möchte ich die zweite unbenutzte Gitterspalte freilegen, damit auch Gegenstände darin Platz finden.
Alle Beispiele, die ich finden kann, scheinen sich nur mit einfachen Objekttypen wie Ints und Strings zu befassen.
Jede Hilfe wird geschätzt. Terry
Nach dem Lesen vieler Artikel gibt mir nichts Hinweise darauf, wie man einen internen StackPanel steuert – Terry151151