Как можно предоставить родительское окно как шаблон - WPF

Предположим, у меня есть 4 окна в моем проекте, и я пытаюсь предоставить определенную кнопку закрытия и один заголовок

Как я могу сделать объект окна и все окна использовать его в качестве шаблона.

Вот пример того, что мы имеем для окна шаблона:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        WindowStyle="None" AllowsTransparency="True" >
<Grid>
<Button Content="Close" Height="40" VerticalAlignment="Top" HorizontalAlignment="Right"/>
<TextBlock VerticalAlignment="Top" HorizontalAlignment="Center" X:Name="WindowTitle/>
</Grid>
</Window>

Как я могу использовать для всех моих окон в качестве шаблона. Спасибо

1 ответ

Решение

На самом деле, нет необходимости писать родительское окно. Ты можешь использовать Style а также Template вместо. Это более удобно и рекомендуется командой Microsoft WPF.

Введите код ниже в свой App.xaml и вы получите картинку выше:

<Application x:Class="Walterlv.Demo.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             .........>
    <Application.Resources>
        <Style x:Key="Style.Window.Default" TargetType="Window">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Window">
                        <Grid Background="{TemplateBinding Background}">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="40"/>
                                <RowDefinition/>
                            </Grid.RowDefinitions>
                            <Button Grid.Row="0" Content="Close" Height="40" VerticalAlignment="Top" HorizontalAlignment="Right"/>
                            <TextBlock Grid.Row="0" VerticalAlignment="Top" HorizontalAlignment="Center"
                                       Text="{TemplateBinding Title}"/>
                            <Border Grid.Row="1" BorderThickness="{TemplateBinding BorderThickness}"
                                    BorderBrush="{TemplateBinding BorderBrush}">
                                <!-- This is the container to host your Window.Content -->
                                <ContentPresenter/>
                            </Border>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Application.Resources>
</Application>

И вы можете использовать только одно свойство Style поделиться такой "картиной":

<Window x:Class="Walterlv.Demo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Style="{StaticResource Style.Window.Default}">

</Window>

Вы можете определить различные виды стилей в App.xaml файл и выберите кого-нибудь в вашем XxxWindow.xaml тебе нужно.

Другие вопросы по тегам