【问题标题】:Is it possible to set ButtonContentProperty to a control(basically a System.Windows.Shapes.Path) using FrameworkElementFactory?是否可以使用 FrameworkElementFactory 将 ButtonContentProperty 设置为控件(基本上是 System.Windows.Shapes.Path)?
【发布时间】:2015-08-01 03:27:07
【问题描述】:

我正在尝试创建一个 DataGrid(WPF) 类型的自定义控件,该控件接受一个字符串列表作为列,并且这些列将使用特定模板 进行更改(或自定义)。

目前我正在使用 `

   FrameworkElementFactory buttonFact = new FrameworkElementFactory(typeof(Button));
   Path path = new Path();
   path.Stroke = System.Windows.Media.Brushes.Black;
   path.StrokeThickness = 2;
   path.Data = System.Windows.Media.Geometry.Parse("M0,5 H10,10");
   buttonFact.SetValue(Button.ContentProperty, path);

但是当我这样做时,我收到异常说

不支持从 Visual 或 ContentElement 派生的值。

附件说我应该能够通过单击“+”或“-”来展开/折叠行。 谁能帮我解决这个问题?

【问题讨论】:

  • 在 FrameworkElementFactory 实例上设置 Button.Content 属性似乎没有意义。
  • 来自Remarks on FrameworkElementFactory这个类是一种以编程方式创建模板的弃用方式,它是FrameworkTemplate的子类,例如ControlTemplate或DataTemplate;当您使用此类创建模板时,并非所有模板功能都可用。以编程方式创建模板的推荐方法是使用 XamlReader 类的 Load 方法从字符串或内存流加载 XAML。
  • 哦,感谢 Clemens 提供的信息,我现在知道了。

标签: c# wpf wpf-controls wpfdatagrid


【解决方案1】:

您可以使用 FrameworkElementFactory,但不是设置 buttonFact 的 Content 属性,而是必须为 Path 创建一个单独的 FrameworkElementFactory 并使用 buttonFact.AppendChild 方法。

【讨论】:

    猜你喜欢
    • 2011-12-18
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    相关资源
    最近更新 更多