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 中,我们可以使用水平方向的 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 占位符设置为某个控件并将命令添加到命令栏,如下图所示。

在此处输入图像描述

希望,这对某人有帮助。

4

1 回答 1

1

您需要做的就是添加一个空的RowsLayout(或ColumnsLayout)控件,就像您在想要的位置添加一个按钮一样。然后将命令从原始控件的Commands拖到新组的Commands中。

当你知道诀窍时,这很简单。

于 2013-09-18T02:18:35.953 回答