利用资源字典中的 WindowStyle 并将按钮添加到应用程序中的 ControlPresenter
Make use of WindowStyle from resource dictionary and add Buttons to a ControlPresenter in an application
我使用包含我所有样式、图标等的资源字典。
现在我想添加我自己的标题栏来实现解决方案的标题、我的图像和一个 ContentPresenter。
使用 WindowStyle 时,我想在此 ContentPresenter 中添加特定于应用程序的项目,但我不知道如何继续。
这是我的 WindowStyle。在网格内,您会找到我要填充的 ContentPresenter。
<Style TargetType="{x:Type Window}" x:Key="tkDarkWindowStyle">
<Setter Property="AllowsTransparency" Value="True"></Setter>
<Setter Property="Foreground" Value="{StaticResource tkBrandBlueBrush}"></Setter>
<Setter Property="Background" Value="{StaticResource exQuiteDarkBrush}"></Setter>
<Setter Property="WindowStyle" Value="None"></Setter>
<Setter Property="BorderThickness" Value="0"></Setter>
<Setter Property="BorderBrush" Value="{StaticResource exQuiteDarkBrush}"></Setter>
<Setter Property="WindowChrome.WindowChrome">
<Setter.Value>
<WindowChrome CaptionHeight="80" />
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Window">
<DockPanel LastChildFill="True">
<Border Background="{TemplateBinding Background}" DockPanel.Dock="Top"
Height="80" x:Name="titlebar">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<DockPanel Grid.Column="0">
<Path DockPanel.Dock="Left" Margin="10" Stretch="Uniform" Fill="{TemplateBinding Foreground}" Data="{Binding Source={StaticResource tkPrimaryLogo}}" VerticalAlignment="Center">
</Path>
<Label Content="{TemplateBinding Title}" Foreground="{TemplateBinding Foreground}" Margin="10" DockPanel.Dock="Left" FontSize="26" VerticalAlignment="Center"/>
</DockPanel>
<ContentPresenter Grid.Column="1"/>
</Grid>
</Border>
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="1" Padding="4">
<ContentPresenter/>
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我使用了这样的样式并尝试编辑模板并向标题栏添加例如一些按钮。
<Window.Resources>
<Style TargetType="{x:Type Window}" x:Key="newWindow" BasedOn="{StaticResource tkDarkWindowStyle}">
<!--here add application specific items? -->
</Style>
</Window.Resources>
如何在我的应用程序中使用 WindowStyle 并将特定项目添加到我留在标题栏的 space?
因为 Window
只有一个 Content
属性,所以在 ControlTemplate
中包含一个以上的 <ContentPresenter />
元素是没有意义的。
您可能想要创建一个自定义的 class,它继承自 Window
并添加一个名为 "TitleBarContent" 或其他名称的依赖项 属性。然后,您可以将 ContentControl
添加到绑定到此 属性:
的模板
<ContentControl Content="{TemplateBinding TitleBarContent}" />
您可以像往常一样在样式 setter 中设置依赖项 属性 的值:
<Style TargetType="{x:Type local:YourWindowClass}" x:Key="newWindow" BasedOn="{StaticResource tkDarkWindowStyle}">
<Setter Property="TitleBarContent">
<Setter.Value>
<TextBlock>title...</TextBlock>
</Setter.Value>
</Setter>
</Style>
我使用包含我所有样式、图标等的资源字典。 现在我想添加我自己的标题栏来实现解决方案的标题、我的图像和一个 ContentPresenter。 使用 WindowStyle 时,我想在此 ContentPresenter 中添加特定于应用程序的项目,但我不知道如何继续。
这是我的 WindowStyle。在网格内,您会找到我要填充的 ContentPresenter。
<Style TargetType="{x:Type Window}" x:Key="tkDarkWindowStyle">
<Setter Property="AllowsTransparency" Value="True"></Setter>
<Setter Property="Foreground" Value="{StaticResource tkBrandBlueBrush}"></Setter>
<Setter Property="Background" Value="{StaticResource exQuiteDarkBrush}"></Setter>
<Setter Property="WindowStyle" Value="None"></Setter>
<Setter Property="BorderThickness" Value="0"></Setter>
<Setter Property="BorderBrush" Value="{StaticResource exQuiteDarkBrush}"></Setter>
<Setter Property="WindowChrome.WindowChrome">
<Setter.Value>
<WindowChrome CaptionHeight="80" />
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Window">
<DockPanel LastChildFill="True">
<Border Background="{TemplateBinding Background}" DockPanel.Dock="Top"
Height="80" x:Name="titlebar">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<DockPanel Grid.Column="0">
<Path DockPanel.Dock="Left" Margin="10" Stretch="Uniform" Fill="{TemplateBinding Foreground}" Data="{Binding Source={StaticResource tkPrimaryLogo}}" VerticalAlignment="Center">
</Path>
<Label Content="{TemplateBinding Title}" Foreground="{TemplateBinding Foreground}" Margin="10" DockPanel.Dock="Left" FontSize="26" VerticalAlignment="Center"/>
</DockPanel>
<ContentPresenter Grid.Column="1"/>
</Grid>
</Border>
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="1" Padding="4">
<ContentPresenter/>
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我使用了这样的样式并尝试编辑模板并向标题栏添加例如一些按钮。
<Window.Resources>
<Style TargetType="{x:Type Window}" x:Key="newWindow" BasedOn="{StaticResource tkDarkWindowStyle}">
<!--here add application specific items? -->
</Style>
</Window.Resources>
如何在我的应用程序中使用 WindowStyle 并将特定项目添加到我留在标题栏的 space?
因为 Window
只有一个 Content
属性,所以在 ControlTemplate
中包含一个以上的 <ContentPresenter />
元素是没有意义的。
您可能想要创建一个自定义的 class,它继承自 Window
并添加一个名为 "TitleBarContent" 或其他名称的依赖项 属性。然后,您可以将 ContentControl
添加到绑定到此 属性:
<ContentControl Content="{TemplateBinding TitleBarContent}" />
您可以像往常一样在样式 setter 中设置依赖项 属性 的值:
<Style TargetType="{x:Type local:YourWindowClass}" x:Key="newWindow" BasedOn="{StaticResource tkDarkWindowStyle}">
<Setter Property="TitleBarContent">
<Setter.Value>
<TextBlock>title...</TextBlock>
</Setter.Value>
</Setter>
</Style>