デフォルトでは、次の図に示すように、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 プレースホルダーを何らかのコントロールに設定し、コマンド バーにコマンドを追加します (次の図を参照)。
希望、これは誰かに役立ちます。