默认情况下,Lightswitch 2011会将控件的命令栏置于控制之下,如下图所示。
Hovewer,我想把这个命令栏放在控件的右边(下一张图片)。
这是怎么做到的?
您需要创建控制扩展,更准确地说,创建组控制扩展。因此,创建Lightswitch Extension Project,为该项目添加新的用户控件,例如“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中,我们可以使用水平方向的Stack Panel,它将包含一些控件,然后是命令栏。对于控件,我们使用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(see this)。如果存在命令栏,我们很容易将其折叠。
用法很简单。您添加新的组执行设计器。将Group的控制权改为Control1,将CONTROL占位符设置为某个控件,并将命令添加到命令栏,如下图所示。
希望,这对某人有帮助。
答案 0 :(得分:1)
您需要做的就是添加一个空的 RowsLayout (或 ColumnsLayout )控件,就好像您要添加一个按钮一样。然后将命令从原始控件的命令拖到新组的命令。
当你知道这个伎俩时,这很简单。