我应该从stackpanel而不是堆栈面板,网格或其他UI元素或UserControl继承吗?

时间:2010-03-28 02:29:26

标签: .net wpf xaml user-controls

因此,我正在建立一个可能在对话窗口中的UI,或者可能嵌入在更大页面的一部分中。

我没有很多使用WPF的经验,但是在ASP.NET中你总是使用UserControls,因为它们不是真正的通用UI继承来继承(并且在某种程度上UserControl只是一个div)。

我的同事编写了许多直接从stackpanel继承的控件。这似乎是一种体面的做事方式。但是当我为我要编写的代码创建一个控件时,我看到了一个只包含UserControl的对话框,我在WPF的上下文中并不熟悉。

那么有人可以向我解释一下构建一个继承自用户控件的控件与直接从stackPanel继承的控件的区别吗?

2 个答案:

答案 0 :(得分:1)

如果您尝试在StackPanel上编写变体,那么继承StackPanel只是个好主意。

WPF编程很像HTML页面设计 - 您可以使用语义结构并使用单独的样式处理外观,或者您可以交织逻辑和样式。

您的自定义控件有责任提供一些行为和数据,可能只是通过绑定数据。根据这些工作量,它可能只是一个类标识符和一个默认模板。

WPF中最重要的一个想法是使用控件和数据模板来改变外观可以实现多少。

我建议学习this tutorial以及Christian Moser article中的图表。

答案 1 :(得分:0)

WPF中有不同级别的实施控制。根据“WPF in Action”一书,可以使用三种方法:

  1. 用户控件。这类似于ASP.NET用户控件。您将使用其他控件的组合来构建控件。
  2. 自定义控件。这旨在跨不同项目执行更多可密封和可重用的组件。
  3. FrameworkElement的。这是更低级的东西。
  4. 从Stackpanel实现声音类似于自定义控件方法。这实际上取决于您在三种方法中选择所需的控制级别,复杂性和可重用性。根据我的个人经验:

    用户控件更容易制作,但很难重复使用,也不容易将主题应用于它。 (你知道WPF允许相同的控件有不同的呈现方式 - 进一步阅读:WPF中的模板);自定义控件(您可以从控件,面板,网格和其他控件继承)提供重用,重新主题等功能。

    回到你的问题。答案是,取决于你需要什么。如果你只想在asp.net中使用类似于usercontrol的东西,那么在wpf中使用usercontrol。我不会从stackpanel或grid继承,除了我需要替代stackpanel或grid,将布局留给设计师担心。