默认情况下,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 中,我们可以使用水平方向的 Stack Panel 女巫将包含一些控件,然后是命令栏。为了进行控制,我们使用 ContentItemPresenter 巫婆 ContentItem 属性将绑定到第一个子项(在 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(请参阅此)。如果命令栏存在,我们可以很容易地折叠它。
用法很简单。您添加新的组做设计师。将 Group 的控件更改为 Control1,将 CONTROL 占位符设置为某个控件并将命令添加到命令栏,如下图所示。
希望,这对某人有帮助。