访问UserControl的内部控件

时间:2011-08-30 20:26:42

标签: c# .net wpf xaml

我正在构建一个自定义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才能获得此功能。

2 个答案:

答案 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