0

デフォルトでは、次の図に示すように、Lightswitch 2011 はコントロールのコマンド バーを制御下に置きます。

コマンド バーの既定の場所

ただし、このコマンド バーをコントロールの右側に配置したいと考えています (次の図)。

ここに画像の説明を入力

どうやってこれを行うのですか?

コントロール エクステンション、より正確にはグループ コントロール エクステンションを作成する必要があります。したがって、Lightswitch 拡張プロジェクトを作成し、このプロジェクトに新しいユーザー コントロール (「Control1」など) を追加します。

このコードを Common/Metadata/Controls/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 では、水平方向のスタック パネル ウィッチを使用できます。これには、いくつかのコントロールとそれに続くコマンド バーが含まれます。コントロールには、ContentItemPresenter ウィッチを使用します。ContentItem プロパティは最初の子アイテム (lsml ファイルで Placeholder として定義されます) にバインドされます。コマンド バーには、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 (これを参照) を使用できます。コマンド バーが存在する場合は、簡単に折りたたむことができます。

使い方は簡単です。新しい Group do デザイナーを追加します。Group のコントロールを Control1 に変更し、CONTROL プレースホルダーを何らかのコントロールに設定し、コマンド バーにコマンドを追加します (次の図を参照)。

ここに画像の説明を入力

希望、これは誰かに役立ちます。

4

1 に答える 1

1

All you need to do is add an empty RowsLayout (or ColumnsLayout) control, as if you were adding a button where you want it. Then drag the command from the original control's Commands to the new group's Commands.

It's quite simple when you know the trick.

于 2013-09-18T02:18:35.953 に答える