通过VisualStates

时间:2016-03-03 14:59:54

标签: c# xaml uwp win-universal-app

我有一群相对小组,里面有一群孩子。我想在VisualStates中通过AdoptiveTrigger更改子项的位置。 问题是,当我想将元素位置从其他元素的下方更改为该元素的右侧时,我将删除下面附加属性的值,然后设置RightOf属性以使其工作,否则它会崩溃应用程序。 现在我想现在如何删除以下值? 我试过了 a。在属性窗口中为每个状态重置绑定,然后分配我的值 b。将该值设置为空字符串,如“”; c.Ignoring该财产。 这些都不起作用! 请帮帮我!

2 个答案:

答案 0 :(得分:2)

将附加属性RelativePanel.Below设置为空可以正常工作。除此之外,我们还可以通过设置AlignTopWithAlignVerticalCenterWith属性来解决此问题。

这是因为AlignTopWith的优先级高于Below,而对于AlignVerticalCenterWith属性,如果没有冲突,则会应用它。根据我的测试,AlignVerticalCenterWith的优先级也高于Below

有关详细信息,请参阅RelativePanel课程中的Conflicting relationships部分。

以下是我用来测试的样本:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup>
            <VisualState>
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="600" />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="BlueRect.(RelativePanel.Below)" Value="" />
                    <Setter Target="GreenRect.(RelativePanel.RightOf)" Value="BlueRect" />
                    <Setter Target="GreenRect.(RelativePanel.Below)" Value="RedRect" />
                    <!--<Setter Target="GreenRect.(RelativePanel.AlignVerticalCenterWith)" Value="BlueRect" />-->
                    <!--<Setter Target="GreenRect.(RelativePanel.AlignTopWith)" Value="BlueRect" />-->
                </VisualState.Setters>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>

    <RelativePanel>
        <Rectangle x:Name="RedRect"
                   Width="100"
                   Height="100"
                   Fill="Red" />
        <Rectangle x:Name="BlueRect"
                   Width="100"
                   Height="200"
                   Fill="Blue"
                   RelativePanel.Below="RedRect"
                   RelativePanel.RightOf="RedRect" />
        <Rectangle x:Name="GreenRect"
                   Width="100"
                   Height="100"
                   Fill="Green"
                   RelativePanel.Below="BlueRect"
                   RelativePanel.RightOf="RedRect" />
    </RelativePanel>
</Grid>

它的工作方式如下: enter image description here

答案 1 :(得分:0)

你可以做到

<Setter Target="SomeElement.(RelativePanel.Below)" Value="{x:Null}" />