Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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# 何时在自定义控件中对依赖项属性使用属性?_C#_Wpf_Xaml_Windows Runtime_Windows 10 - Fatal编程技术网

C# 何时在自定义控件中对依赖项属性使用属性?

C# 何时在自定义控件中对依赖项属性使用属性?,c#,wpf,xaml,windows-runtime,windows-10,C#,Wpf,Xaml,Windows Runtime,Windows 10,一段时间以来,我一直在想什么时候应该在自定义控件中使用属性或依赖性属性,所以我想问一下是个好主意 假设我有一个简单(我是说,非常简单)的用户控件,里面只有一个按钮和一个文本块。让我们将文本块称为“myTextBlock” 现在,如果我知道需要将该文本块的文本绑定到其他内容,我会使用依赖属性,这不是问题 但是,如果我只需要通过XAML将TextBlock的Text属性设置为某个值,然后保持不变,该怎么办? 如果我使用属性而不是从属属性,这有关系吗? 一个选项是否比另一个更快/更好,如果是,为什么

一段时间以来,我一直在想什么时候应该在自定义控件中使用属性或依赖性属性,所以我想问一下是个好主意

假设我有一个简单(我是说,非常简单)的用户控件,里面只有一个按钮和一个文本块。让我们将文本块称为“myTextBlock”

现在,如果我知道需要将该文本块的文本绑定到其他内容,我会使用依赖属性,这不是问题

但是,如果我只需要通过XAML将TextBlock的Text属性设置为某个值,然后保持不变,该怎么办? 如果我使用属性而不是从属属性,这有关系吗? 一个选项是否比另一个更快/更好,如果是,为什么

以下是具有两个选项的示例:

public String ButtonText
{
    get { return (String)GetValue(ButtonTextProperty); }
    set { SetValue(ButtonTextProperty, value); }
}

public static readonly DependencyProperty ButtonTextProperty =
    DependencyProperty.Register("ButtonText", typeof(String), typeof(MyUserControl),
    new PropertyMetadata(String.Empty, OnButtonTextPropertyChanged));

private static void OnButtonTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    (MyUserControl)d.myTextBlock.Text = (String)e.NewValue;
}
仅凭财产:

public String ButtonText
{
    get { return myTextBlock.Text; }
    set { myTextBlock.Text = value; }
}
我通常使用简单属性,但我不知道这是否是在这里使用的更好方法。当然可以,这不是问题

提前谢谢


塞尔吉奥

我总是问这些基本问题

我是否需要它是可绑定的、动画或样式并具有默认值 简单属性无法为此控件提供的设置

当我要序列化/反序列化此属性时,是否需要使用此新属性保留XAML(表达式) 控制

如果是,那么我将使用
dependencProperty
。如果不是,那么我只使用简单的属性来在这个控件中使用。这与是否要在对象中使用
字段
vs
属性
的问题类似。我的建议是,当您的属性中需要框架的功能时,使用它,因为它们为您提供了更多选项。您想知道是否需要这些选项。

您希望使用DependencyProperty的另一个原因是您有一个基/子控件关系,并且您希望其他开发人员能够使用它。您没有创建向控件公开的接口,而是提供即时静态getter/setter来读取/修改控件的值。当您创建
dependencProperty

如有疑问,请始终针对控件创建简单的属性/字段

我不同意总是与
dependencProperty
一起出现的评论,因为它与简单属性相比并不便宜

例如,如果您想更改属性,而它是一个
依赖属性
,那么很可能需要手动编辑属性的名称,该属性是一个
字符串
,并且容易出错。现在将其与一个简单的属性进行比较,该属性为我提供了编译时检查,我可以很容易地找到引用并对其进行一些更改


我曾经有过这样的经历:
dependencProperty
是一种过火的行为,应该只使用简单的属性,其他开发人员可以清楚地看到它的意图。

不仅是数据绑定,而且样式设置器和动画都需要依赖属性。我会一直使用依赖属性,因为它提供了更大的灵活性。此外,即使您只需要双向绑定(而不是动画),也可以使用简单的属性实现
INotifyPropertyChanged
,而不是一直使用
dependencproperty