如何在XAML设计器中了解主动控制?

时间:2015-05-13 14:14:27

标签: xaml silverlight design-time

如何在设计时知道用户在自定义项目控件中激活/关注哪个控件,以便显示所选项目的渲染?

我的功能类似于TabControl

enter image description here

我的控制之处在于它显示了一个非常简单的顺序工作流程,并会显示面包屑代替标签。目前,我只是显示控件的第一个面板内容。我需要知道开发人员何时在XAML编辑器中有另一个活动面板来显示该面板的内容。

我目前正在使用MeasureOverride中可用的值,但只要我在代码隐藏中有任何可用内容,它就会灵活。

我尝试过这样的黑客行为

if (System.ComponentModel.DesignerProperties.IsInDesignTool)
{
    foreach (var panel in this.Panels)
    {
        panel.GotFocus += focusHandler;
    }
}

并使用System.Windows.Input.FocusManager.GetFocusedElement()但到目前为止还没有遇到任何运气。

1 个答案:

答案 0 :(得分:1)

有两种方法可以解决这个问题:

艰难的方式(Visual Studio Designer支持)

最好的方法是查看WPF Designer Extensibility documenation,并了解如何实现DesignControl的DesignTime支持。

在设计时,Designer有一些机制阻止用户直接与控件交互。这就是为什么你难以确定哪个元素具有焦点。

您可以教授设计师如何通过您的控件提供自定义装饰器,以便用户可以通过装饰者与他们互动。

可供参考,TabControl可扩展性模块可在以下位置找到:

   $recordCount = 0;        
   while(@$row_select_kat = mysql_fetch_assoc($results_select_kat))
    {

        if(($recordCount%3)==0)
        {

            echo"<div id=\"rek_poz_a\">";
            modAddsDisplayHelper::wyswietlReklamyPozA();
            echo"</div>";

        }

    $recordCount++;

    }

关键想法似乎是:

  1. C:\Program Files (x86)\Microsoft SDKs\Silverlight\v5.0\Libraries\Client\Design - System.Windows.Controls.Design.dll - System.Windows.Controls.VisualStudio.Design.dll - System.Windows.Controls.Expression.Design.dll 列出了可以显示选择的控件类型(在这种情况下是SelectedTabItemPolicy
  2. TabItem然后在选定的TabItem上调用TabItemAdornerProvider
  3. 这反过来调用:

    item.get_Context()get_Services()发布(服务);

  4. 似乎带有价值字典。这里有很多兔洞需要探索。

    更容易出路

    您实际上可以回复属性表中的更改。例如SetDesignTimeIsSelected更改后,您可以显示不同的页面。

    更新日志的 更新了WPF Designer文档的链接。