C# 如何在网格中更改(交换)帧内容?

C# 如何在网格中更改(交换)帧内容?,c#,uwp,C#,Uwp,我正在通过拖放来改变画面 通过拖放,可以识别两个帧 但是,我不能同时交换这两个帧 而且,我必须“按原样”交换两个帧。(无需重新初始化或重新分配等) 我的英语很差,但是,看到源代码你们可以理解我的问题:-)(此代码抛出一个错误!) 似乎SwapFrame方法并没有做您真正想要做的事情,因为我知道您只想交换它们的内容: void SwapFrame(Frame IN_pSrcFrame, Frame IN_pDestFrame) { var firstFrameContent

我正在通过拖放来改变画面

通过拖放,可以识别两个帧

但是,我不能同时交换这两个帧

而且,我必须“按原样”交换两个帧。(无需重新初始化或重新分配等)

我的英语很差,但是,看到源代码你们可以理解我的问题:-)(此代码抛出一个错误!)



似乎
SwapFrame
方法并没有做您真正想要做的事情,因为我知道您只想交换它们的内容:

void SwapFrame(Frame IN_pSrcFrame, Frame IN_pDestFrame)
{    
    var firstFrameContent = IN_pSrcFrame.Content;
    var secondFrameContent = IN_pDestFrame.Content;

    //detach contents
    IN_pSrcFrame.Content = null; 
    IN_pDestFrame.Content = null;

    IN_pSrcFrame.Content = secondFrameContent;
    IN_pDestFrame.Content = firstFrameContent;
}
您可以看到,我们必须首先分离内容,因为当您尝试分配给新帧时,将内容分配给另一帧时,会导致问题


出于好奇,我们实际上只能用
null
分离\u pDestFrame中的
内容,因为替换第一个
框架的
内容
,也会在过程中“分离”其原始内容,但这种“对称”解决方案看起来更好。

很高兴它有帮助!快乐编码:-)
<GridView Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <ScrollViewer HorizontalScrollBarVisibility="Visible">
            <Frame x:Name="ElementFrame0" Height="313" Width="325" CanDrag="True" AllowDrop="True" />
        </ScrollViewer>
    </Grid>

    <Grid>
        <ScrollViewer HorizontalScrollBarVisibility="Visible">
            <Frame x:Name="ElementFrame1" Height="313" Width="325" CanDrag="True" AllowDrop="True" />
        </ScrollViewer>
    </Grid>

    <Grid>
        <ScrollViewer HorizontalScrollBarVisibility="Visible">
            <Frame x:Name="ElementFrame2" Height="313" Width="325" CanDrag="True" AllowDrop="True" />
        </ScrollViewer>
    </Grid>

    <Grid>
        <ScrollViewer HorizontalScrollBarVisibility="Visible">
            <Frame x:Name="ElementFrame3" Height="313" Width="325" CanDrag="True" AllowDrop="True" />
        </ScrollViewer>
    </Grid>

    <Grid>
        <ScrollViewer HorizontalScrollBarVisibility="Visible">
            <Frame x:Name="ElementFrame4" Height="313" Width="325" CanDrag="True" AllowDrop="True" />
        </ScrollViewer>
    </Grid>

    <Grid>
        <ScrollViewer HorizontalScrollBarVisibility="Visible">
            <Frame x:Name="ElementFrame5" Height="313" Width="325" CanDrag="True" AllowDrop="True" />
        </ScrollViewer>
    </Grid>

    <Grid>
        <ScrollViewer HorizontalScrollBarVisibility="Visible">
            <Frame x:Name="ElementFrame6" Height="313" Width="325" CanDrag="True" AllowDrop="True" />
        </ScrollViewer>
    </Grid>

    <Grid>
        <ScrollViewer HorizontalScrollBarVisibility="Visible" CanDrag="True">
            <Frame x:Name="ElementFrame7" Height="313" Width="325" CanDrag="True" AllowDrop="True" />
        </ScrollViewer>
    </Grid>

</GridView> </Page>
void SwapFrame(Frame IN_pSrcFrame, Frame IN_pDestFrame)
{    
    var firstFrameContent = IN_pSrcFrame.Content;
    var secondFrameContent = IN_pDestFrame.Content;

    //detach contents
    IN_pSrcFrame.Content = null; 
    IN_pDestFrame.Content = null;

    IN_pSrcFrame.Content = secondFrameContent;
    IN_pDestFrame.Content = firstFrameContent;
}