自定义WPF窗口样式

2023-11-27

我正在尝试制作自定义窗口样式。目标是创建一个可以被我的应用程序中的每个窗口使用的模板。模板包含工具栏、标题和“窗口将使用的区域”。问题是:当我使用我的样式时,我无法再添加网格和控件。

App.xaml

<Style x:Key="CustomWindowStyle" TargetType="{x:Type Window}">
  <Setter Property="WindowStyle" Value="None"/>
  <Setter Property="AllowsTransparency" Value="True"/>
  <Setter Property="ResizeMode" Value="NoResize"/>
  <Setter Property="Background" Value="MintCream"/>
  <Setter Property="BorderBrush" Value="#0046E7"/>
  <Setter Property="BorderThickness" Value="2"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type Window}">
        <Grid Background="{TemplateBinding Background}">
          <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition/>
          </Grid.RowDefinitions>
          <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="Auto"/>
          </Grid.ColumnDefinitions>
          <StackPanel Grid.ColumnSpan="2">
            <TextBlock TextAlignment="Center"
                       Margin="0 10 0 0"
                       FontSize="22"
                       FontWeight="DemiBold"
                       Foreground="RoyalBlue"
                       Text="{TemplateBinding Title}"/>
          </StackPanel>
          <StackPanel Grid.Row="0" Grid.Column="1"
                      Orientation="Horizontal"
                      HorizontalAlignment="Stretch"
                      VerticalAlignment="Center"
                      Margin="0 10 15 0">
            <Button Style="{StaticResource MinimizeButtonStyle}"
                    Width="25"
                    Height="22"
                    Margin="0 0 10 0"/>
            <Button Style="{StaticResource CloseButtonStyle}"
                    Width="25"
                    Height="22"/>
          </StackPanel>
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

主窗口.xaml

<Window x:Class="WindowForHW2.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WindowForHW2"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525"
    Style="{StaticResource CustomWindowStyle}">
<Grid>
  <Button Width="100" Height="40" Content="Hello"/>
</Grid>

Template Works, but I cannot add smth anymore: Window:


您需要添加一个ContentPresenter哪里的Content你的Window去。尝试这个。

<Style x:Key="CustomWindowStyle" TargetType="{x:Type Window}">
  <Setter Property="WindowStyle" Value="None"/>
  <Setter Property="AllowsTransparency" Value="True"/>
  <Setter Property="ResizeMode" Value="NoResize"/>
  <Setter Property="Background" Value="MintCream"/>
  <Setter Property="BorderBrush" Value="#0046E7"/>
  <Setter Property="BorderThickness" Value="2"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type Window}">
        <Grid Background="{TemplateBinding Background}">
          <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
          </Grid.RowDefinitions>
          <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="Auto"/>
          </Grid.ColumnDefinitions>
          <StackPanel Grid.ColumnSpan="2">
            <TextBlock TextAlignment="Center"
                       Margin="0 10 0 0"
                       FontSize="22"
                       FontWeight="DemiBold"
                       Foreground="RoyalBlue"
                       Text="{TemplateBinding Title}"/>
          </StackPanel>
          <StackPanel Grid.Row="0" Grid.Column="1"
                      Orientation="Horizontal"
                      HorizontalAlignment="Stretch"
                      VerticalAlignment="Center"
                      Margin="0 10 15 0">
            <Button Content="+"
                    Width="25"
                    Height="22"
                    Margin="0 0 10 0"/>
            <Button Content="X"
                    Width="25"
                    Height="22" />
          </StackPanel>
        <!-- here goes the content -->
        <ContentPresenter Grid.Row="1"/>
       </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义WPF窗口样式 的相关文章

随机推荐

  • jquery:如何更新可拖动克隆ID?

    我想将可拖动项目添加到可排序列表中 这在我的示例中运行良好http jsbin com ipese5 35 问题是我想在拖动到可排序列表时更新克隆项目的 id 奇怪的是 下面的代码将 de ui 对象中的 id 更新为 new id 正如我
  • 将 RTF 文本从数据库加载到 TRichEdit

    我目前正在将我们的软件解决方案从 Delphi 7 迁移到 2010 大部分更改都很简单 只剩下少量障碍 在表单上 我们使用 TRichEdit 它显示从 MSSQL 数据库中的 blob 字段抓取的 rtf 文本 Delphi 7 中是这
  • 如何在常规管道作业中触发多分支管道 Jenkins 作业?

    我想触发特定的多分支管道作业 maven 发布 工作流程 测试 特定分支 在常规管道作业中 是否有我需要指定的特殊 build 命令模式 代码片段生成器仅打印 没有这样的工作 maven release workflow test 通过反复
  • 根据元素在另一个已排序列表中的位置对 python 中的列表进行排序

    我想根据预先排序的列表对 Python 中的列表进行排序 presorted list 2C 3C 4C 2D 3D 4D unsorted list 3D 2C 4D 2D 我该如何排序unsorted list使得这些值以相同的顺序出现
  • Angular 6 HTML选择菜单设置默认值

    我习惯了旧的 AngularJS 方式来选择菜单和选择默认值等 但我很难理解如何在 Angular 中执行此操作 6 我有一系列菜单项 fontChoices label Trebuchet value Trebuchet MS Helve
  • Updatepanel 提供完整回发而不是异步回发

    我遇到了一个似乎非常著名的问题 我的 updatepanel 触发完整回发而不是异步回发 正常的解决方案是为所有动态添加的控件提供一个 ID 我已经这样做了 但我仍然得到完整的回发而不是异步回发 这是代码 HTML
  • 如何在 matplotlib 中绘制 3D 旋转图?

    假设您有一条 2D 曲线 例如 from matplotlib import pylab t numpy linspace 1 1 21 z t 2 pylab plot t z 产生 我想进行一场革命来实现 3d 绘图 参见http re
  • 如何在Android项目中使用ThreeTenABP

    我使用的是 Android Studio 2 1 2 我的 Java 设置如下 gt java version gt openjdk version 1 8 0 91 gt OpenJDK Runtime Environment build
  • Linq to Entities 中的动态 where 子句

    我正在使用 linq toEntity EF 我有一个带有 4 个字符串参数的构造函数 根据哪个参数不为空 我必须构建 linq 查询 我可以使用 if else 语句 但我还有其他带有 10 个参数的构造函数 在这种情况下 将会有很多组合
  • 在 SQL Server 上逐字使用 SOUNDEX()

    这是我的问题 例如我有一张桌子Products包含一个字段 Name Products ID Name 1 USB Key 10Go 2 Intel computer 3 12 inches laptop computer 我目前正在为 i
  • C# 中的 FlowDocument 内存问题

    我目前正在尝试解决释放 FlowDocument 资源的问题 我正在加载一个 rtf 文件并使用 TextRange Load 将其放入 FlowDocument 中 我注意到 在执行此操作后 它会保留这些资源 并且 GC 不会收集它 我运
  • 控制台应用程序中的 Twitter OAuth

    是否可以在不访问身份验证网页的情况下对 Twitter 控制台应用程序进行授权 我需要它 因为我正在开发可以从我们公司 Twitter 获取直接消息的应用程序 该控制台应用程序安排在 Web 服务器上 而不是由人类驱动 问候 阿列克谢 扎哈
  • 如何在 nhibernate 中复制和重试死锁

    查看我的日志 我可以看到我的应用程序很容易出现死锁 它们出现在我的应用程序的许多部分 1 有没有办法复制这个问题 即 我只在日志中看到过这一点 2 如果事务被锁定 重试的最佳 最简单方法是什么 3 如果我将调用包装在 try catch 中
  • 如何指定属性必须是(比如说)整数列表,而不仅仅是列表?

    使用属性库和 Python 3 6 我认为以下内容可以让我指定x and y只能包含整数 import attr attr s class C x List int attr ib not working y attr ib type Li
  • 内存目标 BTS 为何会比 load / BTS reg,reg / store 慢得多?

    在一般情况下 可以使用内存或寄存器操作数的指令如何会比内存操作数慢 mov mov gt 指令 gt mov mov 基于发现的吞吐量和延迟Agner Fog 的说明书 以我为例 查看 Skylake p238 我看到以下数字btr bts
  • Resharper 格式化链式方法

    R 中是否有设置将链接方法格式化为从实例化类的相同字符开始 我想要的是 var foo new FooDataBuilder WithDate myDate WithBar myBar Build R 给了我什么 var foo new F
  • 如何在 Windows 中注册自定义 URL 协议?

    如何向 Windows 注册自定义协议 以便在单击电子邮件或网页中的链接时打开我的应用程序并将 URL 中的参数传递给它 Go to Start然后在Find type regedit gt 它应该打开注册表编辑器 Click Right
  • ASP.NET MVC 获取视图的最后修改日期/文件信息

    我需要在工作申请的每一页上注明最后修改日期 我曾经通过在 WebForms 母版页底部包含对 的引用来实现此目的 该引用将返回当前 aspx 页面的上次修改日期 我的代码甚至会检查关联的 aspx cs 文件 比较上次修改日期 并返回最近的
  • .Net枚举winforms字体样式?

    我一直在寻找一种使用 Net 框架列出给定字体的有效字体样式的方法 即使我必须 pinvoke gdi32 或其他一些 API 因为并非所有字体都属于 System Drawing FontStyle 枚举值 粗体 斜体 常规 删除线 下划
  • 自定义WPF窗口样式

    我正在尝试制作自定义窗口样式 目标是创建一个可以被我的应用程序中的每个窗口使用的模板 模板包含工具栏 标题和 窗口将使用的区域 问题是 当我使用我的样式时 我无法再添加网格和控件 App xaml