我正在构建一个自定义UserControl,它允许我在ProgressBar中放置文本。问题是,ProgressBar的DependencyProperties都没有转移过来。这是我的自定义UserControl的XAML。
<UserControl
x:Class = "MyProgram.MyCustomProgressBar"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" >
<Grid>
<ProgressBar Name="uiProgressBar" />
<Label Name="uiLabel" />
</Grid>
</UserControl>
当我开始使用此UseControl时,如何从XAML访问和设置最小值,最大值,值等。
<local:MyCustomProgressBar x:Name="uiLoadTime" ??.uiProgressBar.Maximum="50" />
我希望我不需要重新定义一堆DependencyProperties才能获得此功能。
答案 0 :(得分:2)
通常的方法是使用DependencyProperty ......一旦你习惯了它,它就不那么糟糕了。
在usercontrol的代码隐藏中使用内置代码段中的“propdp”。
我们采用ProgressBar.Maximum示例:
创建一个整数dependencyproperty,默认值为100(或任何你喜欢的),将其命名为InnerProgressBarMax。
在UserControl的XAML中,您可以这样绑定它:
<ProgressBar Maximum="{Binding InnerProgressBarMax, ElementName=myUsrCtrl}" />
当您在应用程序的其他部分使用该控件时,只需输入如下值:
<local:MyCustomProgressBar x:Name="uiLoadTime" InnerProgressBarMax="50" />
冲洗&amp;重复你要公开的每个属性。
修改强> 如果你真的需要暴露50+ DP,你可以通过为你的DP指定智能默认值来降低任务。
为此,在创建DP时,请设置new PropertyMetadata(YOUR_DEFAULT_VALUE)
完成后,您的控件可能会暴露许多DP,但您只需在使用该控件的XAML代码中手动设置一些。
答案 1 :(得分:1)
将所有内容包装在DependencyProperties中的替代方法是让UserControl的使用者提供ProgressBar
。它看起来像这样:
<local:MyCustomProgressBar x:Name="uiLoadTime">
<local:MyCustomProgressBar.ProgressBar>
<ProgressBar Maximum="50" />
</local:MyCustomProgressBar.ProgressBar>
</local:MyCustomProgressBar>
然后在MyCustomProgressBar.xaml.cs
中,您将公开ProgressBar的公共属性。在其setter中,修改您认为合适的属性,然后将其添加到UserControl的根Grid
。