Опция закрепления WPF, которая не заполняет высоту - PullRequest
0 голосов
/ 11 сентября 2011

Я ищу вариант WPF, который показывает панели по бокам и позволяет вам прикреплять / откреплять их. В основном это означает окно с основным элементом управления в центре и несколькими различными панелями на левой и правой сторонах этого основного элемента управления. Эти панели свернуты по умолчанию, видны только их заголовки, и, если я наведу на них указатель мыши, они развернутся НАД основным элементом управления (не смещая основной элемент управления), но у меня также есть возможность закрепить эту панель, где она остается постоянно развернутой. out, на этот раз вынуждает главный центральный элемент управления изменять размер.

Теперь это звучит почти так же, как и большинство опций управления стыковкой, и действительно я смотрел на Avalon и MixModes Synergy , но проблема с этими опциями заключается в том, что их панели заполняются вся высота. Я хочу, чтобы панель определенной высоты появлялась при наведении на нее курсора, я не хочу, чтобы она появлялась на экране, и я не могу найти ничего другого, что делает это. Кто-нибудь еще видел что-то подобное?

В основном мои собственные идеи о том, как сделать это, включают в себя программное перемещение панели с одного закрепленного элемента управления на другой неподкрепленный элемент управления, но это звучит безумно некрасиво, и я бы хотел альтернативы.

1 Ответ

0 голосов
/ 11 сентября 2011

Вот чистый пример XAMl того, как вы можете добиться функциональности Pin / Unpin.

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>


    <DockPanel Grid.Column="1">
        <Label Content="Main Content Area" FontSize="22"
               VerticalAlignment="Center" HorizontalAlignment="Center"/>
    </DockPanel>

    <StackPanel HorizontalAlignment="Left">
        <StackPanel.Style>
            <Style>
                <Setter Property="Grid.Column" Value="1"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=LeftPinBtn,Path=IsChecked}" Value="True">
                        <Setter Property="Grid.Column" Value="0"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </StackPanel.Style>
        <ToggleButton Content="Pin/Unpin" x:Name="LeftPinBtn"/>
    </StackPanel>

</Grid>

В приведенном выше коде,

  • Левая панель лежит (плавает) в том же столбце сетки основного содержимого.
  • Когда ToggleButton проверяется, что они переходят к соответствующему столбцу стыковочной сетки.

Вы можете настроить этот пример и включить события наведения мыши, которые будут отображать / скрывать панели.

  • Добавление столбца сетки справа + HorizontalAlignment="Right" даст вам правую панель.
  • Аналогично, используя Строки (вместо столбцов) & VerticalAlignment добавит функциональность верхнего / нижнего штифта.
...