Повторное использование кнопок развертывания [+] и свертывания [-] TreeView в WPF

StackOverflow https://stackoverflow.com/questions/1499016

Вопрос

Есть ли способ повторно использовать простое расширение [+] и рухнуть [-] кнопки, которые появляются рядом с узлами в WPF TreeView?Я хотел бы иметь подобное изображение в другом месте моего приложения для развертывания и свертывания некоторых элементов управления.

Это было полезно?

Решение

На самом деле это ToggleButton, я проверил шаблон TreeView на Простые стили проект и вот что я нашел:

    <ControlTemplate TargetType="ToggleButton">
      <Grid
        Width="15"
        Height="13"
        Background="Transparent">
        <Path x:Name="ExpandPath"
          HorizontalAlignment="Left" 
          VerticalAlignment="Center" 
          Margin="1,1,1,1"
          Fill="{StaticResource GlyphBrush}"
          Data="M 4 0 L 8 4 L 4 8 Z"/>
      </Grid>
      <ControlTemplate.Triggers>
        <Trigger Property="IsChecked"
             Value="True">
          <Setter Property="Data"
              TargetName="ExpandPath"
              Value="M 0 4 L 8 4 L 4 8 Z"/>
        </Trigger>
      </ControlTemplate.Triggers>
    </ControlTemplate>

Итак, вот что вам нужно сделать, чтобы все заработало:

<Window x:Class="StackOverflowTests.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" x:Name="window1" Height="300" Width="300"
 Loaded="window1_Loaded"
 xmlns:local="clr-namespace:StackOverflowTests">
 <Window.Resources>
  <SolidColorBrush x:Key="GlyphBrush" Color="#444" />
  <ControlTemplate x:Key="toggleButtonTemplate" TargetType="ToggleButton">
   <Grid
            Width="15"
            Height="13"
            Background="Transparent">
    <Path x:Name="ExpandPath"
              HorizontalAlignment="Left" 
              VerticalAlignment="Center" 
              Margin="1,1,1,1"
              Fill="{StaticResource GlyphBrush}"
              Data="M 4 0 L 8 4 L 4 8 Z"/>
   </Grid>
   <ControlTemplate.Triggers>
    <Trigger Property="IsChecked"
                 Value="True">
     <Setter Property="Data"
                  TargetName="ExpandPath"
                  Value="M 0 4 L 8 4 L 4 8 Z"/>
    </Trigger>
   </ControlTemplate.Triggers>
  </ControlTemplate>
  <Style x:Key="toggleButtonStyle" TargetType="ToggleButton">
   <Setter Property="Template" Value="{StaticResource toggleButtonTemplate}" />
  </Style>
 </Window.Resources>
 <StackPanel>
  <ToggleButton x:Name="toggleButton" Height="20" Width="20" Style="{StaticResource toggleButtonStyle}" />
 </StackPanel>
</Window>
  • Сначала вы берете шаблон (toggleButtonTemplate) и помещаете его в свои ресурсы.
  • Затем вы создаете стиль (toggleButtonStyle), который устанавливает шаблон (toggleButtonTemplate) элемента управления.
  • Наконец, вы сообщаете ToggleButton, что его стиль — toggleButtonStyle.

Если вы просто скопируете вставку из него, все должно сразу работать.

Это простой процесс, но он может вызвать у вас головную боль, если вы не привыкли использовать шаблоны. Если у вас возникнут вопросы, дайте мне знать.

Чтобы узнать немного о мини-языке путей:

Мини-язык геометрии

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top