Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问UserControl的内部控件_C#_.net_Wpf_Xaml - Fatal编程技术网

C# 访问UserControl的内部控件

C# 访问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,它允许我将文本放置在ProgressBar中。问题是,ProgressBar的任何从属属性都不会被转移。这是我的自定义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" />


我希望我不需要重新定义一堆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吗?您可能会遇到架构问题。另外,请看我的编辑。