Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xaml 将资源应用于SemanticZoom ZoomedInView引发异常_Xaml_Windows 10_Uwp - Fatal编程技术网

Xaml 将资源应用于SemanticZoom ZoomedInView引发异常

Xaml 将资源应用于SemanticZoom ZoomedInView引发异常,xaml,windows-10,uwp,Xaml,Windows 10,Uwp,我已将该案件简化为以下内容: <Page> <Page.Resources> <GridView x:Key="TestGrid"/> <ListView x:Key="TestList"/> </Page.Resources> </Page> <Grid >... <VisualStateManager.VisualStateGroups > <VisualStateGrou

我已将该案件简化为以下内容:

<Page>

<Page.Resources>

<GridView x:Key="TestGrid"/>
 <ListView x:Key="TestList"/>

</Page.Resources>

</Page>

<Grid >...

<VisualStateManager.VisualStateGroups >
  <VisualStateGroup x:Name="VisualStateGroup" CurrentStateChanged="VisualStateGroup_CurrentStateChanged">
   <VisualState x:Name="WideView">
    <VisualState.StateTriggers>
     <AdaptiveTrigger MinWindowWidth="720" />
    </VisualState.StateTriggers>
    <VisualState.Setters>
    </VisualState.Setters>
   </VisualState>
   <VisualState x:Name="NarrowView">
    <VisualState.StateTriggers>
     <AdaptiveTrigger MinWindowWidth="0" />
    </VisualState.StateTriggers>
    <VisualState.Setters>
    </VisualState.Setters>
   </VisualState>
  </VisualStateGroup>
 </VisualStateManager.VisualStateGroups>

<SemanticZoom...>

<SemanticZoom.ZoomedInView>
  <GridView/>
 </SemanticZoom.ZoomedInView>

<SemanticZoom.ZoomedOutView>

 <GridView/>

</SemanticZoom.ZoomedOutView>
引发异常的:System.ArgumentException值不在预期范围内


但是如果我删除了注释并设置了一个新实例,那就行了。那么有什么区别呢?为什么我不能将资源应用于semanticzoom ZoomMedinView?

问题发生在这一部分,而不是将ListView/Gridview应用于ZoomInView/ZoomOutView

(ListView)this.Resources["TestList"]; 
我不认为我们可以将GirdView或ListView放在这里,因为它们不可共享,请参见UIElement的“XAML资源必须可共享”部分,UIElement永远不可共享

无论如何,最佳实践不是简单地用另一个现有的GirdView替换当前的GirdView,而是应该修改与另一个数据源的绑定

    private void VisualStateGroup_CurrentStateChanged(object sender, VisualStateChangedEventArgs e)
    {
        if (e.NewState.Name == "NarrowView")
        {
            //assign the new data source to ZoomedInView
            (zoomview.ZoomedInView as ListView).ItemsSource = xxxxx;
        }
        else
        {
            //assign the new data source to ZoomedOutView
            (zoomview.ZoomedOutView as GridView).ItemsSource = xxxxx;
        }
    }

你对资源的看法是对的,有时人们认为这很快,我所做的是将它们作为资源保留,再引用两个实例,并通过代码和资源的样式进行绑定。我也有同样的问题,我不明白这与新的数据源有什么关系。目标应该是根据屏幕大小在
列表视图
网格视图
之间切换,而不是更改数据源,
    private void VisualStateGroup_CurrentStateChanged(object sender, VisualStateChangedEventArgs e)
    {
        if (e.NewState.Name == "NarrowView")
        {
            //assign the new data source to ZoomedInView
            (zoomview.ZoomedInView as ListView).ItemsSource = xxxxx;
        }
        else
        {
            //assign the new data source to ZoomedOutView
            (zoomview.ZoomedOutView as GridView).ItemsSource = xxxxx;
        }
    }