【问题标题】:WPF: How To Customize Generic Custom Window?WPF:如何自定义通用自定义窗口?
【发布时间】:2011-02-19 02:36:42
【问题描述】:

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

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

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

<MyWindow>
         .... 
</MyWindow>

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

<MyWindow>

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

</MyWindow>

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

【问题讨论】:

  • 您能否添加一些有关如何实现自定义窗口的详细信息?它是您从 Window 派生的自定义类吗?您如何在此自定义窗口上自定义关闭/最小化/最大化按钮?
  • 问题不清楚。事实上,我认为有多个问题。 1. 您想将某些元素注入到“非客户区等效”中(这类似于选项卡控件如何使用标题和内容属性完成)和 2. 由使用 MyWindow 的任何人进行注入。试着分解你的问题。第 2 点没有任何意义。
  • 查看我的更新我重写它非常清楚。谢谢。

标签: c# wpf xaml


【解决方案1】:

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

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

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

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

【讨论】:

  • 我的 MyWindow 自定义控件中已经有一个 ContentPresenter。您可以有多个内容演示者吗??
  • 可以在ContentPresenter上绑定Content属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多