WPF:如何自定义通用自定义窗口?

时间:2011-02-18 16:29:30

标签: c# wpf xaml

这是一个棘手的问题,但无论如何我都会尝试解释......

我有一个自定义控件窗口,遍布我的应用程序。我这样做的原因是因为我希望各种窗口和对话框可以在我的程序中完全自定义。即,最小化,最大化,关闭按钮和框架都是自定义的。这个窗口是在我的generic.xaml中模板化的。现在这个工作,这一切都很好。我得到的想法来自http://www.codeproject.com/KB/WPF/CustomFrames.aspx

现在,这个自定义窗口的用户在他们的xaml中是用户控件,他们基本上使用MyWindow作为其根元素:

<MyWindow>
         .... 
</MyWindow>

但是现在我要做的就是从User Control的xaml中将某些元素“注入”MyWindow。 MyWindow只有一个容器来托管它们。例如,他们可能想要注入最小化按钮旁边显示的工具栏按钮。例如,我可能有一个用户控件执行以下操作(其中MyWindow是根元素):

<MyWindow>

<MyWindow.ToolBar>
    <Button x:Name="BlaBla"/>
</MyWindow.ToolBar>

</MyWindow>

这会将“blabla”放在最小化按钮旁边。但我想知道是否有可能这样做。即,整个MyWindow.ToolBar的事情。是否有这样的结构,这是附属物还是更奇怪的东西?

1 个答案:

答案 0 :(得分:1)

绝对可能,取决于您选择DependencyProperty的类型。您可以使用IEnumerable并将MyWindow.ToolBar dp绑定到内部ItemsSource上的ToolBar

<ControlTemplate>
    <!-- ... snipped down to the ToolBar ... -->
    <ToolBarTray>
       <ToolBar x:Name="PART_ToolBar" />
    </ToolBarTray>
</ControlTemplate>

使用OnApplyTemplate中的相应代码提取PART_ToolBar并为Binding创建新的ItemsSource

编辑:重新阅读您的问题似乎我错过了您想在其他地方添加此内容。我的建议是将此作为object依赖项属性使用,如果绑定不是ContentPresenter,则MyWindow.ToolBar绑定到Visibility并设置{x:Null} }。