Измените высоту строки заголовка

#wpf #xaml #mahapps.metro

Вопрос:

Вопрос: Можем ли мы изменить высоту строки заголовка, отображаемой в MahApps.Metro?

Подробности: Например, в следующем примере XAML от команды MahApps я хочу отобразить содержимое Deploy CupCake TextBlock под изображением кекса. Поэтому я удалил Orientation="Horizontal" его из StackPanel следующего XAML. Как показано на снимке ниже, содержимое Deploy CupCake теперь отображается под изображением кекса, но оно скрывает почти все. Как мы можем сделать так, чтобы весь этот контент отображался под изображением кекса?

Снимок панели инструментов с помощью MahApps.Metro: Под изображением отображается только около 10% содержимого.

Кнопка в строке заголовка с изображением и текстом ниже, которая отключена.

 <mah:MetroWindow x:Class="SampleApp.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:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
                 xmlns:mah="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                 Title="MainWindow"
                 Width="800"
                 Height="450"
                 GlowBrush="{DynamicResource MahApps.Brushes.Accent}"
                 ResizeMode="CanResizeWithGrip"
                 WindowStartupLocation="CenterScreen"
                 mc:Ignorable="d">

  <mah:MetroWindow.LeftWindowCommands>
    <mah:WindowCommands>
      <Button Click="LaunchGitHubSite" ToolTip="Open up the GitHub site">
        <iconPacks:PackIconModern Width="22"
                                  Height="22"
                                  Kind="SocialGithubOctocat" />
      </Button>
    </mah:WindowCommands>
  </mah:MetroWindow.LeftWindowCommands>

  <mah:MetroWindow.RightWindowCommands>
    <mah:WindowCommands>
      <Button Click="DeployCupCakes" Content="Deploy CupCakes">
        <Button.ContentTemplate>
          <DataTemplate>
            <StackPanel Orientation="Horizontal">
              <iconPacks:PackIconModern Width="22"
                                        Height="22"
                                        VerticalAlignment="Center"
                                        Kind="FoodCupcake" />
              <TextBlock Margin="4 0 0 0"
                         VerticalAlignment="Center"
                         Text="{Binding}" />
            </StackPanel>
          </DataTemplate>
        </Button.ContentTemplate>
      </Button>
    </mah:WindowCommands>
  </mah:MetroWindow.RightWindowCommands>

  <Grid>
    <!--  Your content  -->
  </Grid>
</mah:MetroWindow>
 

Комментарии:

1. вы пробовали использовать сетку?

Ответ №1:

Прежде всего, лучше использовать a для использования панели, которая распределяет доступное пространство между своим контентом , например, a Grid , чтобы предотвратить отключение контента, как в случае с StackPanel . Здесь шаблон данных определяет a Grid с двумя строками, где TextBlock масштабируется до нужного размера, а значок занимает оставшееся доступное пространство. Также обратите внимание на HorizontalAlignment значок, он расположен по центру.

 <DataTemplate>
   <Grid>
      <Grid.RowDefinitions>
         <RowDefinition/>
         <RowDefinition Height="Auto"/>
      </Grid.RowDefinitions>
      <iconPacks:PackIconModern Grid.Row="0"
                                Width="22"
                                Height="22"
                                HorizontalAlignment="Center"
                                Kind="FoodCupcake" />
      <TextBlock Grid.Row="1"
                 Margin="4 0 0 0"
                 VerticalAlignment="Center"
                 Text="{Binding}" />
   </Grid>
</DataTemplate>
 

Того же результата можно было бы достичь и с помощью a DockPanel , где последний дочерний элемент (в данном случае значок) занимает оставшееся доступное пространство, поэтому важен порядок определенных элементов управления.

 <DataTemplate>
   <DockPanel>
      <TextBlock DockPanel.Dock="Bottom"
                 Margin="4 0 0 0"
                 VerticalAlignment="Center"
                 Text="{Binding}" />
      <iconPacks:PackIconModern DockPanel.Dock="Top"
                                Width="22"
                                Height="22"
                                HorizontalAlignment="Center"
                                Kind="FoodCupcake" />
   </DockPanel>
</DataTemplate>
 

В обоих случаях вы получите результат ниже, кнопку со значком по центру и текстом ниже.

Метроокно с кнопкой, под которой есть значок с текстом.

Чтобы сделать кнопку более заметной, измените высоту строки заголовка с TitleBarHeight помощью свойства.

 <mah:MetroWindow x:Class="SampleApp.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:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
         xmlns:mah="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         Title="MainWindow"
         Width="800"
         Height="450"
         GlowBrush="{DynamicResource MahApps.Brushes.Accent}"
         ResizeMode="CanResizeWithGrip"
         WindowStartupLocation="CenterScreen"
         mc:Ignorable="d"
         TitleBarHeight="50">
 

Метроокно с кнопкой, на которой есть значок с текстом под ним (высота строки заголовка установлена на 50).

Комментарии:

1. Это сработало. Спасибо вам также за объяснение шагов.