2013-09-17 1 views
0

По умолчанию Lightswitch 2011 устанавливает контрольную панель управления под контролем, как вы можете видеть на следующем рисунке.Lightswitch 2011 - позиция управляющей команды

Default place of command bar

Hovewer, я хочу, чтобы поместить эту команду бар справа от элемента управления (рисунок).

enter image description here

Как это сделать?

Вам необходимо создать расширение управления, точнее, расширение группового управления. Итак, создайте проект расширения Lightswitch, добавьте в этот проект новый пользовательский элемент управления, например «Control1».

Поместите этот код Common/Метаданные/управления/Control1.lsml

<Control Name="Control1" 
    SupportedContentItemKind="Group" 
    AttachedLabelSupport="DisplayedByControl" 
    DesignerImageResource="LightSwitchExtension11.Control1::ControlImage"> 

    <Control.Attributes> 
     <DisplayName Value="Control1" /> 
    </Control.Attributes> 
    <Control.Placeholders> 
     <Placeholder DisplayName="Control" Name="ControlTemplate" />  
    </Control.Placeholders> 
</Control> 

В XAML управления, мы можем использовать горизонтально ориентированный Stack Panel ведьму будет содержать некоторый контроль за которым следует командной строке. Для управления мы используем свойство ContentItemPresenter. Свойство ContentItem будет привязано к первому дочернему элементу (определенному как Placeholder в lsml-файле). Для командной строки мы используем CommandGroupPresenter. Мы должны обновить маржу для хорошей компоновки.

<UserControl x:Class="LightSwitchExtension11.Presentation.Controls.Control1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:framework ="clr-namespace:Microsoft.LightSwitch.Presentation.Framework;assembly=Microsoft.LightSwitch.Client"> 

    <StackPanel x:Name="rootControl" Orientation="Horizontal"> 

     <framework:ContentItemPresenter ContentItem="{Binding ChildItems[0]}" /> 

     <framework:CommandGroupPresenter Commands="{Binding CommandItems}" Margin="5, -3, 0, 0" VerticalContentAlignment="Center"/> 

    </StackPanel> 

</UserControl> 

Теперь у нас есть групповой контроль, который может показать некоторый контроль, за которым следует командная строка. Но панель управления по умолчанию (добавлена ​​Lightswitch) по-прежнему видна. Нам нужно свернуть эту панель команд. Мы можем сделать это в коде. Итак, добавьте этот код в Control1.xaml.cs.

public Control1() 
     { 
      InitializeComponent(); 

      this.SetBinding(MyDataContextProperty, new Binding()); 

     } 

     public object MyDataContext 
     { 
      get { return (object)GetValue(MyDataContextProperty); } 
      set { SetValue(MyDataContextProperty, value); } 
     } 

     public static readonly DependencyProperty MyDataContextProperty = 
      DependencyProperty.Register("MyDataContext", typeof(object), typeof(Control1), new PropertyMetadata(PropChanged)); 

     public static void PropChanged(object sender, DependencyPropertyChangedEventArgs e) 
     { 
      var container = VisualTreeHelper.GetParent(sender as UserControl); 

      var containerParent = VisualTreeHelper.GetParent(container); 

      var commandBar = containerParent.GetChildrenByType<CommandGroupPresenter>().FirstOrDefault(); 

      if (commandBar != null) 
      { 
       commandBar.Visibility = Visibility.Collapsed; 
      } 
     } 

Метод PropChanged важен. Этот метод вызывается после привязки DataContext элемента управления (из-за SetBinding в конструкторе). Мы можем использовать метод VisualTreeHelper.GetParent для получения контроля, ведьма должна содержать панель команд по умолчанию (добавлена ​​Lightswitch). Для получения команды управления командой из этого элемента управления, мы можем использовать метод расширения GetChildrenByType (see this). Если панель команд существует, мы можем легко ее свернуть.

Использование прост. Вы добавляете новый конструктор Group do. Измените управление Group на Control1, установите CONTROL placeholder в некоторый элемент управления и добавьте команды в панель команд, как вы можете видеть на следующем рисунке.

enter image description here

Надежда, это поможет кому-то.

ответ

1

Все, что вам нужно сделать, это добавить элемент управления пуст RowsLayout (или ColumnsLayout), как если бы вы добавить кнопку, где вы хотите. Затем перетащите команду из исходного элемента управления Команды в команду новой группы.

Это довольно просто, когда вы знаете трюк.

+0

Спасибо, могу я сделать что-то не так, но панель команд смещена сверху для некоторых пикселей. –

+0

Это может быть немного странно, чтобы заставить его выглядеть точно определенным образом. У вас в основном есть два варианта. 1 - попробуйте настроить параметры группы макета кнопки и группы, которая ее содержит. 2. Устройтесь на что-то, что «почти», что вы хотите.Какой из них вы выбираете, зависит от того, насколько важно для него выглядеть так, как вы хотите, и сколько времени вы можете дать процессу получения «идеального». –

+0

Вы правы. Еще раз спасибо. –