我需要一個ItemsView的ItemsPanel模板依賴於屬性IsClusterSupported的ItemsControl。 如果沒有ScrollViewer,ItemsControl將始終顯示正確的ItemsPanel,但是當我添加滾動查看器代碼時,即使IsClusterSupported = False,也會顯示ClusterMapItemsPanelTemplate。itemtemplate周圍的滾動查看器撿起錯誤的itemstemplate
這裏可能會發生什麼問題?我附上了下面的代碼。
<Grid Name="MapGrid">
<ScrollViewer>
<ScrollViewer.Style>
<Style TargetType="{x:Type ScrollViewer}">
<Setter Property="VerticalScrollBarVisibility" Value="Hidden"/>
<Setter Property="HorizontalScrollBarVisibility" Value="Hidden"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsScrollingSupported}" Value="True">
<Setter Property="VerticalScrollBarVisibility" Value="Auto"/>
<Setter Property="HorizontalScrollBarVisibility" Value="Auto"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ScrollViewer.Style>
<ItemsControl Name="ItemsControlInnerMap" Loaded="ItemsControlInnerMap_Loaded"
ItemsSource="{Binding ItemsCol}" Tag="{Binding IsClusterSupported, PresentationTraceSources.TraceLevel=High}">
<ItemsControl.Style>
<Style TargetType="{x:Type ItemsControl}">
<Setter Property="ItemsPanel" Value="{StaticResource MapItemsPanelTemplate}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsClusterSupported}" Value="True">
<Setter Property="ItemsPanel" Value="{StaticResource ClusterMapItemsPanelTemplate}"/>
<Setter Property="ItemContainerStyle" Value="{StaticResource ClusterMapGridContainerStyle}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ItemsControl.Style>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border>
<TextBlock Text="{Binding LabelTxt}"/>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.GroupStyle>
<GroupStyle x:Name="MyGroup">
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border Name="BD" BorderBrush="Black" BorderThickness="2">
<ItemsPresenter Name="ClusterPresenter" Tag="{Binding Name}"/>
</Border>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding Name, Converter={StaticResource BorderVisibilityConvertor}}" Value="false">
<Setter TargetName="BD" Property="BorderBrush" Value="Transparent"/>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<!--http://stackoverflow.com/questions/17863271/wpf-using-grid-as-itemshost-stacking-multiple-items-in-single-cell-automatical-->
<Setter Property="Grid.Row" Value="{Binding Items[0].ClusterGridRow}"/>
<Setter Property="Grid.Column" Value="{Binding Items[0].ClusterGridColumn}"/>
<Setter Property="Margin" Value="5"/>
</Style>
</GroupStyle.ContainerStyle>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<Grid Name="ClusterMapGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Loaded="ClusterMapGrid_Loaded"
MaxHeight="{Binding AllowedMaxHeight}" MaxWidth="{Binding AllowedMaxWidth}"
MinHeight="{Binding ReqMinHeight}" MinWidth="{Binding ReqMinWidth}">
</Grid>ReqMinHeight
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
</ItemsControl.GroupStyle>
</ItemsControl>
</ScrollViewer>
</Grid>
RDV(2016年1月4日):我發現這裏一些有趣的事情,希望越來越接近解決方案,但仍然需要幫助。
我所有的綁定工作正常;我用&調試沒有scrollviewer,並在ItemsControl中看到正確的ItemsPanel。 ItemsControl的IsGrouping屬性也設置正確。
當我在ItemsControl附近有一個滾動查看器時,ClusterMapGrid(GroupStyle.Panel)會被加載而不管我有沒有集羣。一旦加載,非集羣模板(MapsItemsPanelTemplate)不會被加載。
爲了解決這個問題,我嘗試將ClusterMapGrid可見性綁定到ItemsControl的IsGrouping屬性,但是又一次以某種方式將ClusterMapGrid加載到scrollviewer的情況下,並且一旦加載,非集羣模板加載失敗。
我用snoop來檢查ClusterMapGrid的可見性,我可以看到它已經崩潰了,但是如果手動將它改爲snoop爲任何其他值,非集羣模板加載並且一切正常。我嘗試將可見性設置爲在ClusterMapGrid_Loaded事件中摺疊,但它也沒有幫助。
進一步的調試我發現ScrollViewer正在加載其中的所有項目 - 因此ClusterMapGrid被加載,一旦我使用Snoop更改可見性,在非羣集情況下它將被卸載。
問題聲明:如何在加載ClusterMapGrid後卸載它,我知道這是非集羣方案。
將設置' 「ItemsControl」上的DataContext顯式工作? '' –
Kcvin
另外,請查看輸出窗口中的任何綁定/應用程序錯誤並更新問題以告訴我們它們是什麼如果有的話。 – Kcvin
我驗證了(使用snoop並附加一個調試器),根據IsClusterSupported值正確設置ItemsControl的Tag屬性。出於某種原因,PresentationTraceSources.TraceLevel = High不起作用。 – RDV