我创建了一个windows控件模板,因此我的应用程序中的每个窗口都将在顶部共享相同的菜单,在底部共享版权,并共享整体外观(颜色等)。当我创建一个新窗口并将模板应用到它时,新窗口看起来像预期的模板,但我无法向窗口添加任何新内容。我拖到新窗口上的任何东西都是不可见的(即XAML显示了我添加的控件,但我在窗口上看不到它)。模板不是最好的选择吗?正如我上面提到的,我试图让每个窗口使用相同的菜单和布局(颜色,底部的版权文本框)。除此之外,我希望能够在"模板化"窗口中放置与每个特定窗口相关的其他项目。看起来很基本,但作为一个VB6的家伙,我正在努力掌握WPF(当然也很喜欢WPF),我不知道如何实现它。感谢您的帮助。下面是我的模板代码,以及如何使用该模板设置新窗口。
模板(在Application.Resources中)
<Style x:Key="WindowTemplateMain" TargetType="{x:Type Window}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<DockPanel Margin="0,0,-1.667,0.333" HorizontalAlignment="Stretch" Width="Auto">
<DockPanel.Background>
<LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
<GradientStop Color="#FFAEC2EE" Offset="0"/>
<GradientStop Color="#FFFEFEFE" Offset="1"/>
</LinearGradientBrush>
</DockPanel.Background>
<Menu DockPanel.Dock="Top">
<MenuItem Header="_File">
<MenuItem Header="_Time Entry" Name="mnu_TimeEntry" Click="mnu_TimeEntry" />
<Separator />
<MenuItem Header="_Logout" Click="mnu_LogoutClick"/>
<Separator />
<MenuItem Header="_Exit" Click="mnu_ExitClick"/>
</MenuItem>
<MenuItem Header="_Reports">
<MenuItem Header="_Report1" />
<MenuItem Header="_Report2" />
<MenuItem Header="_Report3" />
</MenuItem>
<MenuItem Header="_Administration">
<MenuItem Header="_Task1" />
<MenuItem Header="_Task2" />
<MenuItem Header="_Task3" />
</MenuItem>
</Menu>
<Grid Margin="0,0,0,0" Width="Auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="74*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="3*"/>
</Grid.RowDefinitions>
<TextBlock Style="{StaticResource MWB_Copyright}" Grid.Row="2" Grid.ColumnSpan="2" Margin="5,0,4.666,4" />
</Grid>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
"已应用"模板的新窗口:
<Window x:Class="MWB_TimeKeeper_Main"
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:MWB_TimeKeeper"
mc:Ignorable="d"
Title="MWB TimeKeeper Main"
Style="{DynamicResource WindowTemplateMain}" >
<Button x:Name="MyButton" Content="MyButton" Height="100" Width="75"/>
</Window>
按钮"MyButton"是我从工具箱中拖动的,显示在XAML代码中,但不显示在窗口上。同样,我确信我只是没有正确使用模板,或者需要使用某种类型的风格/模板组合,但我无法理解,并且已经在网上搜索了一段时间。
提前感谢您的帮助!
Chris W是对的。
如以下代码所示,将内容演示者添加到您的内容模板中。我已经测试过了,按钮显示出来了。
注意:我已经删除了点击事件来测试代码
<Application x:Class="WpfApplication1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
StartupUri="MainWindow.xaml">
<Application.Resources>
<Style x:Key="WindowTemplateMain" TargetType="{x:Type Window}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<DockPanel Margin="0,0,-1.667,0.333" HorizontalAlignment="Stretch" Width="Auto">
<DockPanel.Background>
<LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
<GradientStop Color="#FFAEC2EE" Offset="0"/>
<GradientStop Color="#FFFEFEFE" Offset="1"/>
</LinearGradientBrush>
</DockPanel.Background>
<Menu DockPanel.Dock="Top">
<MenuItem Header="_File">
<MenuItem Header="_Time Entry" Name="mnu_TimeEntry" />
<Separator />
<MenuItem Header="_Logout" />
<Separator />
<MenuItem Header="_Exit" />
</MenuItem>
<MenuItem Header="_Reports">
<MenuItem Header="_Report1" />
<MenuItem Header="_Report2" />
<MenuItem Header="_Report3" />
</MenuItem>
<MenuItem Header="_Administration">
<MenuItem Header="_Task1" />
<MenuItem Header="_Task2" />
<MenuItem Header="_Task3" />
</MenuItem>
</Menu>
<Grid Margin="0,0,0,0" Width="Auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="74*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="3*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="2" Grid.ColumnSpan="2" Margin="5,0,4.666,4" />
</Grid>
<ContentPresenter>
</ContentPresenter>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Application.Resources>
</Application>