使用RelativePanel右对齐面板中心

时间:2017-07-22 18:32:27

标签: xaml uwp alignment relativepanel

我想将控制权与面板中心对齐,我该怎么做?

使用列定义不起作用。

  

RelativePanel错误:名称' MiddleSplitter'在当前上下文中不存在

<Grid x:Name="LayoutRoot">

    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition x:Name="MiddleSplitter"/> <!--get middle?-->
    </Grid.ColumnDefinitions>

    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup>
            <VisualState>
                <VisualState.StateTriggers>
                    <StateTrigger IsActive="True"/> <!--just for test-->
                </VisualState.StateTriggers>
                <VisualState.Setters>

                    <Setter Target="AppListBox.(RelativePanel.AlignRightWith)" Value="MiddleSplitter"/>

                </VisualState.Setters>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>

    <ScrollViewer Grid.ColumnSpan="2">
        <RelativePanel Margin="5">

            <ListBox Name="AppListBox" Height="150" Margin="5"/>

        </RelativePanel>
    </ScrollViewer>
</Grid>

使用RelativePanel,这被简化为仅显示出现此问题的控件(AppListBox),我不想使用其他类型的面板。

2 个答案:

答案 0 :(得分:2)

一个简单的解决方法是在MiddleSplitter内添加真实 RelativePanel,而不是依赖于它之外的东西。

您可以创建超轻量级Line元素,禁用其命中测试并将其隐藏。您可以将RelativePanel.AlignHorizontalCenterWithPanel设置为True,让它保持在中间位置。我将其命名为同名[{1}},因此请勿忘记从MiddleSplitter中删除该名称。

ColumnDefinition

答案 1 :(得分:1)

仅当AlignRightWith="name"控件位于name内时,

RelativePanel才有效。因此,在您的情况下,您无法使用AlignRightWith="MiddleSplitter"

据我了解您的代码,您希望将内容放在两个不同的列中,但您希望立即滚动两列。为此,您可以按照以下代码示例

<ScrollViewer>
    <Grid x:Name="LayoutRoot">

        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>

        <RelativePanel Margin="5" Grid.Column="1">
            ....
        </RelativePanel>

        <RelativePanel Margin="5" Grid.Column="2">
            <TextBlock Text="My Text" Name="AppListBox" Height="150" Margin="5"/>
            ....
        </RelativePanel>
    </Grid>
</ScrollViewer>