Используйте WindowStyle из словаря ресурсов и добавьте кнопки в ControlPresenter в приложении - PullRequest
0 голосов
/ 16 апреля 2019

Я использую словарь ресурсов со всеми моими стилями, иконками и многим другим.Теперь я хотел бы добавить свой заголовок, реализующий название решения, мое изображение и 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 в своем приложении и добавлять определенные элементы в пространство, которое я оставил на заголовке?

1 Ответ

1 голос
/ 16 апреля 2019

Поскольку Window имеет только одно свойство Content, нет смысла включать более одного <ContentPresenter /> элемента в ControlTemplate.

Возможно, вы захотите создать собственный класс, который наследуется от Window и добавляет свойство зависимости с именем "TitleBarContent" или что-то в этом роде. Затем вы можете добавить ContentControl к шаблону, который привязан к этому свойству:

<ContentControl Content="{TemplateBinding TitleBarContent}" />

Вы можете установить значение свойства зависимости в установщике стиля как обычно:

<Style TargetType="{x:Type local:YourWindowClass}" x:Key="newWindow"  BasedOn="{StaticResource tkDarkWindowStyle}">
    <Setter Property="TitleBarContent">
        <Setter.Value>
            <TextBlock>title...</TextBlock>
        </Setter.Value>
    </Setter>
</Style>
...