我的用户控件上的所有基本属性都需要依赖属性吗?

Do I need dependency properties for all basic properties on my user control?

我目前正在编写我的第一个用户控件,它将在堆栈面板中包含一个标签和一个文本框,如下所示:

<Grid>
    <StackPanel Orientation="Horizontal" DataContext="{Binding RelativeSource={RelativeSource Self}}">
        <Label Content="{Binding Label}" Width="60"></Label>
        <TextBox Text="{Binding TextBoxContent}" Width="60"/>
    </StackPanel>
</Grid>

这在设置页面中最有用,因为它会重复用于多个不同的设置。对于这些设置中的每一个,我都想设置(至少)宽度、高度、验证规则和错误模板属性。至于文本本身,我已经为标签和文本框创建了依赖关系 属性(如您在上面的代码片段中所见)。

我的问题是:我是否需要为我刚才提到的我实际使用用户控件时要设置的所有属性创建依赖关系 属性?这似乎是多余的工作(因为它们已经存在于文本框中,基本上它们只会将我的用户控件的 属性 重定向到文本框的同名 属性)?如果我想在我的文本框上使用更多的属性(例如,AcceptsReturn 等),这就更麻烦了。

如果您决定从 TextBox 而不是 UserControl 派生,则可以节省多余的工作 - 只需将您的控件视为 "labeled textbox",您需要做的就是派生来自 TextBox 并添加所需的依赖属性以适应标签。对于更复杂的用户控件当然不会出现这种情况,但在您的情况下似乎没问题。

虽然这样做的缺点是您必须采用 TextBox 的默认控件模板并使用它来添加您的标签,这可能有点棘手。

无论哪种方式,我都建议您查看 MSDN 上的 Control Authoring Overview 页面,这对您在 WPF 中编写第一个控件非常有用。