c# - 访问 UserControl 的内部控件

标签 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 来获得这个功能。

最佳答案

通常的方法是使用 DependencyProperty ......一旦你真的习惯了它并没有那么糟糕。

在您的用户控件的代码隐藏中使用内置代码段中的“propdp”。

让我们以 ProgressBar.Maximum 为例:

创建一个默认值为 100(或您喜欢的任何值)的整数 dependencyproperty,将其命名为 InnerProgressBarMax。

在您的 UserControl 的 XAML 中,您可以这样绑定(bind)它:

<ProgressBar Maximum="{Binding InnerProgressBarMax, ElementName=myUsrCtrl}" />

当您在应用程序的另一部分使用该控件时,只需输入如下值:

<local:MyCustomProgressBar x:Name="uiLoadTime" InnerProgressBarMax="50" />

冲洗并重复您要公开的每个属性。

编辑: 如果您确实需要公开 50 多个 DP,您可以通过为 DP 指定智能默认值来减少麻烦。

为此,当您创建 DP 时,设置 new PropertyMetadata(YOUR_DEFAULT_VALUE) 的参数

完成后,您的控件可能会公开许多 DP,但您只需在使用该控件的 XAML 代码中手动设置一些。

关于c# - 访问 UserControl 的内部控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7249370/

相关文章:

c# - SaveFileDialog 抛出 System.InvalidOperationException : 'My File.xlsx' is not a valid file name

.net - 从 .NET 调用 Java WS - Java 方式使用 Apache Rampart,.NET 等价物

c# - 哪个集合类对于在 C# 中插入是有效的

c# - 使用后台线程生成的 RenderTargetBitmap 设置图像源

c# - 有没有更简单的方法在 XNA 中制作 3D 模型的动画?

c# - 在 C# 中自动实现的属性

wpf - VisualBrush 中的 TextBox.Background 属性行为异常

c# - 如何在运行时指定 [DllImport] 路径?

c# - 从列表而不是整个索引中删除对象属性

c# - 派生类能否破坏基类的实现