使用UserControl内部的基本控件的属性

时间:2019-04-16 15:26:55

标签: wpf xaml user-controls dependency-properties

如何在用户控件内部使用控件的属性而不必使用DependencyProperty

因为,例如,如果我要使用按钮的所有属性,则必须声明所有这些属性?

如果还有另一种没有用户控制的方法,并且它是正确的方法,那么请您回答。 (对不起,Google翻译)

UserControl:

<UserControl x:Class="UserControls.UserControl01"
                 ...
                 >
        <Grid>
            <Button x:Name="uc_btn" />
            <TextBox x:Name="uc_txt"  />
            <DataGrid x:Name="uc_dtg"  />
        </Grid>
    </UserControl>

使用UserControl的代码:

<Window x:Class="UserControls.wnd02"
        ...
        >
    <Grid>
        <local:UserControl01 uc_btn.Background="Red" uc_txt.Margin="10" uc_dtg.BorderThickness="5" Margin="90" />

        <local:UserControl01 uc_btn.Background="Green" uc_txt.Margin="25" uc_dtg.BorderThickness="20" Margin="5" />
    </Grid>
</Window>

1 个答案:

答案 0 :(得分:0)

按照您的要求去做并不常见。

让我们考虑一个旨在像单个控件一样工作的用户控件。例如时间选择器。它包含两个滑块,可增加/减少小时和分钟。您还可以在小时和分钟文本框中改写,并且两个文本框之间都有一个:。

该用户控件不过是关于一个属性的全部。时间。您不在乎外部的分钟背景。如果此更改发生在用户控件内部。

在这种情况下,通常会向用户控件添加TimeSpan依赖项属性,这是它外部使用的唯一东西。

几乎所有的WPF商业开发都使用MVVM模式,并且TimeSpan将绑定到父视图的视图模型中的一个属性。

那是一种情况。

另一种方法是用户控件封装一堆UI,然后可重复使用。

样式具有作用域,因此当您将样式应用于窗口中的按钮时,该样式将应用于其中的用户控件中的任何按钮。设置其属性。

也有某些标记为“继承”的依赖项属性,其值在可视树中向上传播。

其中之一就是DataContext,大多数团队将使用它来处理用户控件中的属性。

使用MVVM,将会有一个MainWindowViewModel。

那将具有(比如说)ChildUserControlViewModel属性。这将与使用datatemplate指定的数据类型的用户控件相关联。

然后使用RelativeSource绑定将用户控件中的任何属性绑定到ChildUserControlViewModel的属性或MainWindowViewModel的属性。

ViewModel首先是WPF的通用导航和合成模式。您应该能够找到许多博客,比我在SO帖子中能更好地解释它。

这里是一个:

https://social.technet.microsoft.com/wiki/contents/articles/30898.simple-navigation-technique-in-wpf-using-mvvm.aspx