wpf - 在 WPF 中使用 .NET 2.0(Windows 窗体)控件的限制?

标签 wpf datagridview wpf-controls wpftoolkit propertygrid

我想在 WPF 上启动一个新应用程序. WPF 中的新用户界面需要数据 GridView 控制和属性网格 控制。但看起来这两个控件在 WPF 中不存在,我想使用 WindowsFormsHost 托管这两个控件.

但是,如果我这样做,是否有人预见到这种方法有任何限制?

最佳答案

主要限制是您失去了 WPF 的所有强大功能:Data binding , ControlTemplatesDataTemplates , 无限大小, 缩放/旋转, Opacity , Attached Properties , 仅举几个。放弃的太多了!您将不得不使用旧的乏味且容易出错的 WinForms 技术对这些控件进行编程,并再次处理您多年前摆脱的所有这些限制。

数据 GridView

NET Framework 3.5 sp1 有一个 DataGrid这可能会完成这项工作,并且有几个第三方控件可以做到这一点,例如来自 Xceed 的控件。使用基于 WPF 的网格允许在网格内完成数据绑定(bind)、模板化和样式化,如果使用 WinForms 的 DataGridView,这将是不可能的。

属性网格

WPF 不附带 PropertyGrid 的原因是因为使用 WPF 已经为您提供的东西重新创建是如此容易:一个简单的列表框就可以了,样式正确,只需要几行代码隐藏。

使用 WPF 的美妙之处 PropertyGrid实现是您可以使用模板来呈现您正在编辑的属性,最重要的是,您可以通过在 XAML 中使用一些绑定(bind)来表达它们来添加新的属性编辑器。例如,我们的一个属性网格中的一些属性是用 slider 设置的,只需大约五行 XAML 就可以做到这一点。

下面是一些代码,说明了在 WPF 中实现 PropertyGrid 背后的关键概念:

public class PropertyGrid
{
  ...
  public static readonly DependencyProperty SelectedObjectProperty = ...
  {
    PropertyChangedCallback = (obj, e) =>
    {
      PropertyItems =
        from pi in SelectedObject.GetType().GetProperties()
        select new PropertyGridItem { Object = SelectedObject, PropertyInfo = pi };
    }
  }
}

public class PropertyInfo
{
  public object Object;
  public PropertyInfo PropertyInfo;
  public object Value
  {
    get { return PropertyInfo.GetValue(Object); }
    set { PropertyInfo.SetValue(Object, value); }
  }
  public string Category
  {
    get
    {
      return (
        from attrib in PropertyInfo.GetCustomAttributes().OfType<CategoryAttribute>()
        select attrib.Name
      ).FirstOrDefault();
    }
  }
}

有了这个,复制PropertyGrid的整个外观和感觉非常快速和容易。使用几行 XAML:只需使用按类别分组的 ListBox 和 ItemTemplateDockPanel 组成包含固定宽度 TextBlock绑定(bind)到属性名称和 ContentPresenter打印属性编辑器。

关于wpf - 在 WPF 中使用 .NET 2.0(Windows 窗体)控件的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1720340/

相关文章:

c# - Xaml 绑定(bind)不适用于 Application.Current

c# - WinForms 应用程序中的 Webbrowser HTML 文件存储目录?

vb.net - 如何防止Image.FromFile()方法锁定文件

database - 从数据库中删除错误

wpf - 使用 wpf 图像控件显示文件系统中的图像

c# - TemplateBinding 未传递到 ControlTemplate.Resources 中创建的 VisualBrush

c# - WPF Expander 在用户交互后忽略数据绑定(bind)

c# - 为什么在代码隐藏中停止动画不起作用?

wpf - 在内存中强制呈现 WPF 控件

c# - 在xaml上将负值显示为正