放置此ScrollViewer会引发错误

时间:2011-10-21 19:28:20

标签: wpf scrollviewer

我有一个WPF窗口,它有一个自定义边框,用于调整大小的Thumb控件和一个两列布局。右列(主要内容区域)是带有ScrollViewer的UserControl,因此它根据需要滚动。我想在左栏添加一个ScrollViewer,但是当我这样做时,它会在运行时给我

  

'System.Windows.Controls.Primitives.ScrollBar'的初始化引发了异常。

内部例外

  

无法将“MS.Internal.NamedObject”类型的对象强制转换为“System.Windows.FrameworkTemplate”。

如果我取出ScrollViewer,一切都会正常工作。

这是基本的XAML(ScrollViewer包裹着TaskPane ItemsControl):

<Window x:Class="MyWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="525" MinWidth="200"
    Height="350" MinHeight="85"
    FontFamily="Segoe UI"
    AllowsTransparency="True" Background="Transparent" 
    ResizeMode="CanResize" WindowStyle="None">

<Border>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="6"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="6"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="6"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="6"/>
        </Grid.RowDefinitions>

        <Grid Grid.Column="1" Grid.Row="1">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="22"/>
            </Grid.RowDefinitions>

            <Grid Grid.Row="0">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>

                <StackPanel Grid.Column="0" Orientation="Vertical">
                    <TextBlock Name="Caption" Text="My Window"/>
                </StackPanel>

                <StackPanel Grid.Column="1" Orientation="Vertical">
                    <!-- Minimize/Maximize/Close buttons -->
                </StackPanel>
            </Grid>

            <Grid Grid.Row="1">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="160"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="24"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>

                <ScrollViewer Grid.Column="0" Grid.Row="1">
                    <ItemsControl Name="TaskPane">
                        ...
                    </ItemsControl>
                </ScrollViewer>

                <StackPanel Name="MainContent" Grid.Column="1" Grid.Row="1" Orientation="Vertical">
                    ...
                </StackPanel>
            </Grid>
        </Grid>

        <ResizeGrip Name="ResizeGrip" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1" Grid.RowSpan="2" Foreground="Red" HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="16" Height="16" Padding="0 0 18 18"/>

        <Thumb Name="TopLeftThumb" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Opacity="0" Cursor="SizeNWSE" DragDelta="TopLeftThumb_DragDelta"/>
        <Thumb Name="TopThumb" Grid.Column="1" Grid.Row="0" VerticalAlignment="Top" Opacity="0" Cursor="SizeNS" DragDelta="TopThumb_DragDelta" />
        <Thumb Name="TopRightThumb" Grid.Column="2" Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Opacity="0" Cursor="SizeNESW" DragDelta="TopRightThumb_DragDelta"/>
        <Thumb Name="LeftThumb" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Left" Opacity="0" Cursor="SizeWE" DragDelta="LeftThumb_DragDelta" />
        <Thumb Name="RightThumb" Grid.Column="2" Grid.Row="1" HorizontalAlignment="Right" Opacity="0" Cursor="SizeWE" DragDelta="RightThumb_DragDelta" />
        <Thumb Name="BottomLeftThumb" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Opacity="0" Cursor="SizeNESW" DragDelta="BottomLeftThumb_DragDelta"/>
        <Thumb Name="BottomThumb" Grid.Column="1" Grid.Row="2" VerticalAlignment="Bottom" Opacity="0" Cursor="SizeNS" DragDelta="BottomThumb_DragDelta" />
        <Thumb Name="BottomRightThumb" Grid.Column="2" Grid.Row="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Opacity="0" Cursor="SizeNWSE" DragDelta="BottomRightThumb_DragDelta"/>
    </Grid>
</Border>

我在线搜索,但可以找到任何相关信息。我尝试使用ScrollViewer作为布局根创建另一个UserControl,并得到相同的错误。

2 个答案:

答案 0 :(得分:4)

您是否有任何机会在任何资源中定义ScrollViewer样式?我看到了这个可能相关的链接:http://blog.alner.net/archive/2010/05/07/wpf-style-and-template-resources_order-matters.aspx

当一个样式使用第二个样式时,通常会发生错误,但第一个样式在第一个样式之后添加。相当难以诊断的错误。

答案 1 :(得分:0)

不知道这是否是问题,但是你没有在'ScrollViewer'之后设置'StackPanel'的行和列。