带有可自定义内容的Windows 10 UWP UserControl

时间:2016-09-04 04:15:47

标签: c# uwp

我想在Windows 10 UWP中使用更改内容进行用户控制。

我知道如何进行简单的用户控制,但我需要一个像这样的用户控件:

<Controls:UserControl x:Name="Usercontrol1" Margin="0,10,0,0" Grid.Row="1">
    <Controls:UserControl.MainContent>
        <Grid x:Name="Content">
            //Items are here
        </Grid>
    </Controls:UserControl.MainContent>
</Controls:UserControl>

我的用户控件中的Grid是空的,我想在每个页面中为此网格提供不同的项目。我想要一种方法在页面中为我的用户控件设置网格,然后将此网格添加到我的用户控件而不是那个空网格。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:11)

为此,您需要在用户控件的代码隐藏中创建MainContent依赖项属性,并使用ContentPresenter显示它。

假设您的用户控件已在MyControl.xamlMyControl.xaml.cs中定义。

创建MainContent依赖项属性

UserControl的{​​{1}}类定义中添加以下内容:

UserControl.xaml.cs

作为Visual Studio中的快捷方式,您可以编写public static readonly DependencyProperty MainContentProperty = DependencyProperty.Register( "MainContent", typeof( object ), typeof( MyControl ), new PropertyMetadata( default( object ) ) ); public object MainContent { get { return ( object ) GetValue( MainContentProperty ); } set { SetValue( MainContentProperty, value ); } } propdp(具体取决于您的版本),然后按标签键自动填写代码段。整个财产。

添加dependencyProperty

ContentPresenter内找到要显示内容的位置,并在MyControl.xaml处放置ContentPresenter属性的绑定。 有几种方法可以做到这一点。

MainContent语法

的最新技术
x:Bind

使用与元素的绑定 - 在这里,您需要向<ContentPresenter Content="{x:Bind MainContent}" /> 元素本身添加x:Name属性,例如将其称为UserControl,然后像这样创建绑定:

RootControl

使用<ContentPresenter Content="{Binding MainContent, ElementName=RootControl}" /> 绑定 - 在DataContext UserControl的构造函数中,您可以设置MyControl.xaml.cs - DataContext然后简单地写一下:

this.DataContext = this;

用法

现在您的<ContentPresenter Content="{Binding MainContent}" /> 已准备就绪,您可以像这样使用它:

UserControl