【问题标题】:Get WPF control properties from the Properties Window从属性窗口获取 WPF 控件属性
【发布时间】:2017-01-05 17:34:35
【问题描述】:

我正在尝试在选择WPF控件时访问属性窗口所显示的属性。

问题在于,虽然我设法在属性窗口中添加了自己的内容,但我还没有找到一种方法来获取对 WPF 设计器用来显示控件属性的引用的引用。

private IVsWindowFrame _frame;
...

if(_frame == null) {
    var shell = parent.GetVsService(typeof(SVsUIShell)) as IVsUIShell;
    if(shell != null) {
        var guidPropertyBrowser = new Guid(ToolWindowGuids.PropertyBrowser);
        shell.FindToolWindow(
            (uint) __VSFINDTOOLWIN.FTW_fFindFirst, ref guidPropertyBrowser, out _frame
        );
    }
}

如您所见,我已经引用了属性窗口,但不幸的是,我不知道如何列出属性。

如果它是相关的,我尝试这样做的原因是因为我想删除(或隐藏)为设计器中的 WPF 控件显示的一些属性。

【问题讨论】:

  • 您正在使用的函数正在返回一个 ToolWindowPane。有了这个对象,你也许可以做更多的事情
  • 但是,如果您提供更多源代码会更容易。在当前状态下,要让代码正常工作并不容易。
  • @ArthurM 如果我知道什么有用的话,我很乐意发布更多代码,不幸的是,我只是在学习 here 的教程,它向我展示了如何创建自定义工具窗口,但是对如何获得对现有参考的参考几乎没有提供任何见解。
  • 标准方法是使用 IVsMonitorSelection:GetCurrentSelection,但在使用自定义 WPF 属性浏览器中显示的对象时,它会为 IVsMultiItemSelect 参数返回 null...

标签: c# .net wpf visual-studio vsix


【解决方案1】:

对 WPF 控件的设计时支持基于公共属性和特性。控件的任何公共属性都显示在属性窗口中,但您可以通过属性更改可见性。隐藏现有属性有一个简单的技巧。您必须定义具有相同名称的新属性并添加属性。属性是否定义为虚拟的,您可以简单地覆盖,但您可以使用关键字 new。

示例代码:

public partial class MyUserControl : UserControl
{
    public MyUserControl()
    {
        InitializeComponent();
    }

    [System.ComponentModel.Browsable(false)]
    public new Brush Background
    {
        get { return base.Background; }
        set { base.Background = value; }
    }
}

设计时属性和继承

当您从具有设计时属性的基组件派生组件或控件时,您的组件将继承基类的设计时功能。如果基本功能足以满足您的目的,则不必重新应用这些属性。但是,您可以覆盖相同类型的属性或将其他属性应用于派生组件。以下代码片段显示了一个自定义控件,该控件通过覆盖基类中应用的 BrowsableAttribute 属性来覆盖从 Control 继承的 Text 属性。

MSDN,你必须使用BrowsableAttribute。基本概念适用于 WinFors 和 WebForms,但 WPF 控件具有相同的概念。

【讨论】:

  • 非常感谢您的回答,但不幸的是,它并没有帮助,因为它需要更新我们拥有数百个组件的整个组件库,这是我正在寻找的主要原因通过创建 vs 扩展来获得解决方案。
  • 这是标准方式。你不能使用一些家长控制吗?几百个组件可能只有几个前辈。
【解决方案2】:

请检查How to enumerate all dependency properties of control?

我认为这将帮助您找到您正在寻找的东西......

问候,

【讨论】:

  • 你好,我知道如何枚举控件的依赖属性,问题是我不想从头开始为 WPF 创建属性窗口的内容我只想隐藏元素它使用 VS 扩展。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-17
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多