AvalonDock - Как отключить возможность автоматического скрытия для всех якорей - PullRequest
0 голосов
/ 29 ноября 2018

Я надеюсь удалить возможность «AutoHide» из моего использования AvalonDock.Я смоделировал свое решение после этого примера здесь: http://lostindetails.com/blog/post/AvalonDock-2.0-with-MVVM

Мой текущий мыслительный процесс состоит в том, что, если я могу удалить опцию как из вкладки (символ рядом с «закрывающим X»), так и из контекстного меню,пользователи не смогут выполнить операцию скрытия.Если есть другой способ выполнить операцию скрытия, это также сработает.

Удаление скрытия из вкладки и контекстного меню

В этом примере он может установить CanClose свойство на LayoutItem, что влияет на любой элемент, который отображается из-за нахождения внутри DocumentsSource.Я хотел бы сделать то же самое, но для CanHide и CanAutoHide и сделать так, чтобы это влияло на Anchorables внутри моего AnchorablesSource.

Редактировать: я добавил строку:

<Setter Property="dockctrl:LayoutAnchorableItem.CanHide" Value="False" />

, что теперь приводит меня на полпути.Эта строка удаляет возможность скрытия, но не удаляет символ вывода «AutoHide» (или опцию контекстного меню).Я знаю, что свойство CanAutoHide существует, но я просто не знаю, как его установить.Вот соответствующие документы из Xceed

Текущее решение

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>


        <dock:DockingManager x:Name="AvalonDockDockingManager" Grid.Row="1"
                    AllowMixedOrientation="True"
                    DataContext="{Binding DockManagerViewModel}"
                    DocumentsSource="{Binding Documents}"
                    AnchorablesSource="{Binding Anchorables}" >

            <dock:DockingManager.Resources>
            </dock:DockingManager.Resources>

            <dock:DockingManager.LayoutItemContainerStyle>
                <Style TargetType="{x:Type dockctrl:LayoutItem}" >
                    <Setter Property="Title" Value="{Binding Model.Title}" />
                    <Setter Property="CloseCommand" Value="{Binding Model.CloseCommand}" />
                    <Setter Property="CanClose"  Value="{Binding Model.CanClose}" />
                    <Setter Property="dockctrl:LayoutAnchorableItem.CanHide" Value="False" />


                </Style>
            </dock:DockingManager.LayoutItemContainerStyle>



            <dock:DockingManager.AnchorablePaneControlStyle>
                <Style TargetType="{x:Type dockctrl:LayoutAnchorableItem}" >
                    <Setter Property="CanHide"  Value="False" />
                </Style>
            </dock:DockingManager.AnchorablePaneControlStyle>



        </dock:DockingManager>
    </Grid>

1 Ответ

0 голосов
/ 10 мая 2019
  1. Вам придется изменить стиль некоторых элементов AvalonDock, чтобы избавиться от вывода AutoHide.Ниже приведен пример XAML стиля AchorablePaneTitle , взятый из Generic.xaml .

  2. Как альтернативное решение: Вы также можете разрешить Пинисчезнуть, установив CanAutoHide="False" and CanHide="False" в в этом примере приложения .

Измененный XAML выглядит следующим образом

<avalonDock:LayoutAnchorable x:Name="WinFormsWindow"
                             ContentId="WinFormsWindow"
                             Title="WinForms Window"
                             ToolTip="My WinForms Tool"
                             CanAutoHide="False"
                             CanHide="False"
                             CanClose="False" >
    <winformsIntegration:WindowsFormsHost x:Name="winFormsHost" Background="White"/>
</avalonDock:LayoutAnchorable>

Это скриншот взят изсвязанный пример приложения выше.Обратите внимание на отсутствующий штифт в окне Winforms .enter image description here

Переопределите стиль AnchorablePaneTitle, чтобы избавиться от пина, определенного в PART_AutoHidePin (например, установите на нем Visibility = "Collapsed").

  <Style TargetType="avalonDockControls:AnchorablePaneTitle">
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate>
          <Border Background="{TemplateBinding Background}"
                  BorderBrush="{TemplateBinding BorderBrush}"
                  BorderThickness="{TemplateBinding BorderThickness}">
            <Grid>
              <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="Auto" />
              </Grid.ColumnDefinitions>
              <avalonDockControls:DropDownControlArea DropDownContextMenu="{Binding Model.Root.Manager.AnchorableContextMenu, RelativeSource={RelativeSource TemplatedParent}}"
                                                      DropDownContextMenuDataContext="{Binding Path=LayoutItem, RelativeSource={RelativeSource TemplatedParent}}">
                <ContentPresenter Content="{Binding Model, RelativeSource={RelativeSource TemplatedParent}}"
                                  ContentTemplate="{Binding Model.Root.Manager.AnchorableTitleTemplate, RelativeSource={RelativeSource TemplatedParent}}"
                                  ContentTemplateSelector="{Binding Model.Root.Manager.AnchorableTitleTemplateSelector, RelativeSource={RelativeSource TemplatedParent}}" />
              </avalonDockControls:DropDownControlArea>

              <avalonDockControls:DropDownButton Style="{StaticResource {x:Static ToolBar.ToggleButtonStyleKey}}"
                                                 Focusable="False"
                                                 Grid.Column="1"
                                                 DropDownContextMenu="{Binding Model.Root.Manager.AnchorableContextMenu, RelativeSource={RelativeSource TemplatedParent}}"
                                                 DropDownContextMenuDataContext="{Binding Path=LayoutItem, RelativeSource={RelativeSource TemplatedParent}}"
                                                 ToolTip="{x:Static avalonDockProperties:Resources.Anchorable_CxMenu_Hint}">
                <Border Background="White">
                  <Image Source="/Xceed.Wpf.AvalonDock;component/Themes/Generic/Images/PinMenu.png">
                  </Image>
                </Border>
              </avalonDockControls:DropDownButton>

              <Button x:Name="PART_AutoHidePin"
                      Grid.Column="2"
                      Focusable="False"
                      Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"
                      Visibility="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}"
                      Command="{Binding Path=LayoutItem.AutoHideCommand, RelativeSource={RelativeSource TemplatedParent}}"
                      ToolTip="{x:Static avalonDockProperties:Resources.Anchorable_BtnAutoHide_Hint}">
                <Border Background="White">
                  <Image Source="/Xceed.Wpf.AvalonDock;component/Themes/Generic/Images/PinAutoHide.png">
                  </Image>
                </Border>
              </Button>

              <Button x:Name="PART_HidePin"
                      Grid.Column="3"
                      Focusable="False"
                      Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"
                      Visibility="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}"
                      Command="{Binding Path=LayoutItem.HideCommand, RelativeSource={RelativeSource TemplatedParent}}"
                      ToolTip="{x:Static avalonDockProperties:Resources.Anchorable_BtnClose_Hint}">
                <Border Background="White">
                  <Image Source="/Xceed.Wpf.AvalonDock;component/Themes/Generic/Images/PinClose.png">
                  </Image>
                </Border>
              </Button>


            </Grid>
          </Border>
          <ControlTemplate.Triggers>
            <DataTrigger Binding="{Binding Model.IsAutoHidden, RelativeSource={RelativeSource Mode=Self}}"
                         Value="True">
              <Setter Property="LayoutTransform"
                      TargetName="PART_AutoHidePin">
                <Setter.Value>
                  <RotateTransform Angle="90" />
                </Setter.Value>
              </Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding Model.CanClose, RelativeSource={RelativeSource Mode=Self}}"
                         Value="True">
              <Setter Property="Command"
                      TargetName="PART_HidePin"
                      Value="{Binding Path=LayoutItem.CloseCommand, RelativeSource={RelativeSource TemplatedParent}}" />
              <Setter Property="ToolTip"
                      TargetName="PART_HidePin"
                      Value="{x:Static avalonDockProperties:Resources.Document_Close}" />

            </DataTrigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
...