我目前有一个ListBox
,其DataTemplate
(对于自定义类)是TabControl
(绑定到图表列表),其中包含ContentControl
(显示图表)。
当我滚动ListBox时,TabControl的选项卡正确地离开了屏幕。但是,TabControl中ContentControl的图表不在ListBox中,而是在其他元素之外。
代码示例:
<ListBox x:Name="ListBox" ItemsSource="{Binding ChartItemsList}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Visible">
<ListBox.Resources>
<DataTemplate DataType="{x:Type m:ChartItemsWrapper}">
<StackPanel Orientation="Horizontal">
<shared:PixelSnapper>
<TabControl Background="White" BorderBrush="DarkGray" ItemsSource="{Binding Items}" Margin="3,0" Padding="0" TabStripPlacement="Right">
<TabControl.ContentTemplate>
<DataTemplate>
<DockPanel LastChildFill="True">
<Border BorderBrush="DarkGray" BorderThickness="0,1,0,0">
<Grid Background="White">
<Stuff>
<Grid Margin="0,25,0,0">
<ContentControl Content="{Binding Chart}" Visibility="Collapsed" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" x:Name="mainChart"/>
</Grid>
</Grid>
</Border>
</DockPanel>
<DataTemplate.Triggers ... />
</DataTemplate>
</TabControl.ContentTemplate>
<TabControl.ItemTemplate ... />
<TabControl.ItemContainerStyle ... />
</TabControl>
</shared:PixelSnapper>
</StackPanel>
</DataTemplate>
</ListBox.Resources>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel FlowDirection="LeftToRight" IsItemsHost="True" Orientation="Horizontal"></WrapPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
我尝试设置ZIndexes,更改绑定,但似乎ListBoxes和ContentControls没有混合。任何帮助将不胜感激。
答案 0 :(得分:0)
将HorizontalContentAlignment="Stretch"
添加到ListBox。
我以前遇到过类似的问题,这解决了我的问题。
答案 1 :(得分:0)
除了vishakh369建议的HorizontalContentAlignment="Stretch"
之外,您还可以尝试ClipToBounds="True"
。不知道有什么不同,也许你可以试试看哪一个做得更好。
答案 2 :(得分:0)
很抱歉,这不是大多数人将来会发现有用的答案,但在我的特定情况下,<ContentControl Content="{Binding Chart}" .../>
的绑定指向一个只能在WinFormHost中显示的图表。
由于WinForms和WPF是不同的渲染技术,并且WinForms UI元素将始终覆盖在WPF上,这导致我的WinForm图表在它们应该在屏幕外滚动时不在ListBox之外。
有关详情,请参阅this stackoverflow question或this MSDN post。请注意,在我的研究中,有些人说这个问题在.NET 4.5版本中得到了解决,但似乎并非由于并发症而且必须从发布版本中删除(参见link)。