如何在用户控件内部使用控件的属性而不必使用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>
答案 0 :(得分:0)
按照您的要求去做并不常见。
让我们考虑一个旨在像单个控件一样工作的用户控件。例如时间选择器。它包含两个滑块,可增加/减少小时和分钟。您还可以在小时和分钟文本框中改写,并且两个文本框之间都有一个:。
该用户控件不过是关于一个属性的全部。时间。您不在乎外部的分钟背景。如果此更改发生在用户控件内部。
在这种情况下,通常会向用户控件添加TimeSpan依赖项属性,这是它外部使用的唯一东西。
几乎所有的WPF商业开发都使用MVVM模式,并且TimeSpan将绑定到父视图的视图模型中的一个属性。
那是一种情况。
另一种方法是用户控件封装一堆UI,然后可重复使用。
样式具有作用域,因此当您将样式应用于窗口中的按钮时,该样式将应用于其中的用户控件中的任何按钮。设置其属性。
也有某些标记为“继承”的依赖项属性,其值在可视树中向上传播。
其中之一就是DataContext,大多数团队将使用它来处理用户控件中的属性。
使用MVVM,将会有一个MainWindowViewModel。
那将具有(比如说)ChildUserControlViewModel属性。这将与使用datatemplate指定的数据类型的用户控件相关联。
然后使用RelativeSource绑定将用户控件中的任何属性绑定到ChildUserControlViewModel的属性或MainWindowViewModel的属性。
ViewModel首先是WPF的通用导航和合成模式。您应该能够找到许多博客,比我在SO帖子中能更好地解释它。
这里是一个: