ListBox中的ContentControl在滚动时移到ListBox外部

时间:2016-05-10 02:43:06

标签: c# wpf listbox contentcontrol

我目前有一个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没有混合。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

HorizontalContentAlignment="Stretch"添加到ListBox。 我以前遇到过类似的问题,这解决了我的问题。

答案 1 :(得分:0)

除了v​​ishakh369建议的HorizontalContentAlignment="Stretch"之外,您还可以尝试ClipToBounds="True"。不知道有什么不同,也许你可以试试看哪一个做得更好。

答案 2 :(得分:0)

很抱歉,这不是大多数人将来会发现有用的答案,但在我的特定情况下,<ContentControl Content="{Binding Chart}" .../>的绑定指向一个只能在WinFormHost中显示的图表。

由于WinForms和WPF是不同的渲染技术,并且WinForms UI元素将始终覆盖在WPF上,这导致我的WinForm图表在它们应该在屏幕外滚动时不在ListBox之外。

有关详情,请参阅this stackoverflow questionthis MSDN post。请注意,在我的研究中,有些人说这个问题在.NET 4.5版本中得到了解决,但似乎并非由于并发症而且必须从发布版本中删除(参见link)。