WPF依赖属性

我很难在WPF中了解依赖属性,也许是因为我正在寻找的用例是非常具体的,没有很好的文档记录。

我有一个看起来像这样的自定义控件(请忽略所有可怕的代码,这是暂时的!):

    

我在我的主窗口中调用它,如下所示:

  

并且控件内的代码如下:

 using System; using System.Windows; using System.Windows.Controls; namespace HydroAccessory.Controls { public partial class FillGraph : UserControl { private float percentage; public float Percentage { get { return percentage; } set { percentage = value; PercentageTB.Text = String.Format("Fill Percentage: {0}", percentage.ToString() + "%"); } } public FillGraph() { InitializeComponent(); } } } 

我希望能够做的就是在主窗口中的自定义控件调用中说:

  

(其中FillPercentage是另一个你不需要担心的脚本中的东西)。 控件将被扩展,因此它需要保留为自定义控件。 我知道我可能需要依赖属性,但在尝试了许多不同的方法后,我无法弄清楚如何做这个看似简单的任务。 感谢帮助。

您的代码中没有依赖项属性。

这是一个依赖属性:

 public partial class FillGraph : UserControl { public FillGraph() { InitializeComponent(); } public float Percentage { get { return (float)GetValue(PercentageProperty); } set { SetValue(PercentageProperty, value); } } // Using a DependencyProperty as the backing store for Percentage. This // enables animation, styling, binding, etc... public static readonly DependencyProperty PercentageProperty = DependencyProperty.Register("Percentage", typeof(float), typeof(FillGraph), new PropertyMetadata(0.0f)); } 

正如Ayyappan Subramanian所说,Visual Studio中的propdp片段将有助于创建样板。 只需注意传递给DependencyProperty.Register()的参数,并确保传递给new PropertyMetadata()的默认值是正确的类型。 0.0f是一个浮点数。 如果为float属性传递整数0 ,它将在运行时抛出exception。

常规属性public float Percentage是可选的。 它就在那里供你的代码使用。 XAML根本不会触摸它(如果你怀疑我就把断点放在getter和setter中)。 这是依赖属性的特殊之处。

以下是如何在您的usercontrol XAML中使用它。 请注意绑定的StringFormat参数。

    

注意:如果百分比以0到1而不是0到100的范围表示,请改用p %格式。 我们将p2用于小数点后的两位数。 我们省略了%因为格式字符串提供了这个。

   

假设viewmodel具有FillPercentage属性并正确实现INotifyPropertyChanged ,那么您的问题中的XAML就可以了。