我是UWP的新手,他是一名习惯使用Windows窗体的开发人员。 在Windows窗体中我正在尝试做的事情,我很容易通过表单继承。 UWP似乎没有任何形式的布局继承,看来你必须设计一个UserControl来实现它,然后将它放在页面上并用控件填充页面。
我有一个包含2列网格的控件。在第一列中,我放置了一个StackPanel,此时第二列是空的。
<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>
代码:
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 ) );
}
}
}
现在我要做的是将StackPanel暴露为属性“LeftStackPanel”,并且在设计时我将控件放在页面上我希望能够将按钮,CheckBoxes,Text等拖放到控件内的StackPanel。另外,我想公开第二个未使用的网格列,以便项目也可以放在其中。
我能找到的所有示例似乎只处理简单的对象类型,如整数和字符串。
任何帮助表示赞赏。 特里
答案 0 :(得分:0)
从WinForms迁移到XAML时,这是一个长期的挑战。
简短的回答是,您应该考虑创建 CustomControl 而不是 UserControl 。
UserControl 是一个自包含的UI元素,您可以提供数据并显示它。
如果您不仅需要自定义显示的信息,还需要自定义显示信息的方式,则需要使用 CustomControl 。这将启用您尝试在您的案例中实现的方案。
Here是一个关于如何编写第一个CustomControl的非常好的可视化教程。此外,有关用户和自定义控件之间差异的模式详细信息,请检查this帖子。事实上,关于这个主题有很多文章和教程。其中大部分来自WPF日,但一切仍然适用于UWP。