C# 访问UserControl的内部控件
我正在构建一个自定义UserControl,它允许我将文本放置在ProgressBar中。问题是,ProgressBar的任何从属属性都不会被转移。这是我的自定义UserControl的XAMLC# 访问UserControl的内部控件,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,我正在构建一个自定义UserControl,它允许我将文本放置在ProgressBar中。问题是,ProgressBar的任何从属属性都不会被转移。这是我的自定义UserControl的XAML <UserControl x:Class = "MyProgram.MyCustomProgressBar" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "h
<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" />
我希望我不需要重新定义一堆DependencyProperty来获得此功能。通常的方法是使用DependencyProperty。。。一旦你习惯了就没那么糟糕了 在usercontrol的代码隐藏中使用“propdp”内置代码段 让我们以ProgressBar为例。最大示例: 将一个整数dependencProperty的默认值设为100(或任意值),将其命名为InnerProgressBarMax 在UserControl的XAML中,您可以这样绑定它:
<ProgressBar Maximum="{Binding InnerProgressBarMax, ElementName=myUsrCtrl}" />
在应用程序的另一部分中使用控件时,只需输入如下值:
<local:MyCustomProgressBar x:Name="uiLoadTime" InnerProgressBarMax="50" />
对要暴露的每个属性进行冲洗并重复操作
编辑:
如果你真的需要暴露50+DP,你可以通过为你的DPs指定智能默认值来降低hastle
为此,在创建DP时,设置参数newPropertyMetadata(您的默认值)
完成后,您的控件可能会公开许多dp,但您只需在使用该控件的XAML代码中手动设置一些dp。将所有内容包装在DependencyProperties中的替代方法是让UserControl的使用者提供
ProgressBar
。它可能是这样的:
<local:MyCustomProgressBar x:Name="uiLoadTime" InnerProgressBarMax="50" />
然后在
MyCustomProgressBar.xaml.cs
中,您将公开ProgressBar的公共属性。在其setter中,以您认为合适的方式修改属性,然后将其添加到UserControl的根网格是的,但我真的不想在我可以直接访问它们的情况下重新定义50个不同的PropertyDependence并处理它们的强制和验证方法。你能回避需要公开的许多不同DP吗?您可能会遇到架构问题。另外,请看我的编辑。