包含多个用户控件时,Silverlight ScrollViewer无法正常工作

时间:2013-04-18 13:17:06

标签: silverlight xaml

我有一个页面,其中包含标题区域和内容区域。内容区域只包含一个用户控件。 我们有一个类AbstractRlassA的类结构是要显示的所有类的基类。抽象类B& C都继承自A. 具体类B1和B2继承自B,具体类C1和C2继承自C。

然后,该用户控件包含许多显示A信息的控件,另外还有两个附加控件,分别用于B& C,仅在显示的类具有相关类型时才可见。

那些addituional控件然后显示与其对应的抽象类相关的所有字段,并且具有与具体类相关的附加控件,再次仅在基础类具有正确类型时显示,然后具有与具体类相关的字段

这一切都很好,只是我们正在处理的一些类有很多字段,它们不再适合屏幕。所以,显而易见的事情 - 将内容包装在滚动查看器中。

唯一的问题是这似乎不起作用。

后续控件的可见性绑定到viewmodel上的属性(通过bool到visibility转换器),该属性确定正在处理的类的类型。后备值已折叠,因此它们开始不可见。不确定所需的大小是否会以某种方式无法传递给滚动查看器?由于滚动条没有出现,尽管设置为自动。下面的xaml

<Grid x:Name="LayoutRoot">
  <!-- Divide the page into a row for the header and 1 further rows which are used to position the content -->
  <Grid.RowDefinitions>
    <RowDefinition Height="{StaticResource HeaderRowHeight}" />
    <RowDefinition Height="*" />
    <RowDefinition Height="100" />
  </Grid.RowDefinitions>


  <Grid Grid.Row="0"
        Grid.Column="0"
        Grid.ColumnSpan="2">
    <!-- Page header -->
  </Grid>

  <!-- Main page content follows -->
  <Grid Grid.Row="1"
        Width="auto">
    <ScrollViewer Height="700"
                  VerticalScrollBarVisibility="Auto">
      <dataEdit:CaseTypeInternalEditControl Height="Auto" />
    </ScrollViewer>
  </Grid>
</Grid>

我也尝试将scrollviewer放在用户控件中,但无济于事。我错过了什么?

1 个答案:

答案 0 :(得分:0)

问题在这个问题上并不明显,我需要发布一个后续的子控件,其可见性由此确定:

        <Canvas Visibility="{Binding Path=CaseIsB, Converter={StaticResource BooleanToVisibilityConverter}, FallbackValue=Collapsed}">
            <dataEditControls:CaseBEditControl DataContext="{Binding CaseBEditViewModel}"  />
        </Canvas >
        <Canvas Visibility="{Binding Path=CaseIsC, Converter={StaticResource BooleanToVisibilityConverter}, FallbackValue=Collapsed}">
            <dataEditControls:CaseCEditControl DataContext="{Binding CaseCEditViewModel}"  />
        </Canvas >

问题是Canvas对象的大小为零 - 因此在可见时没有向scrollviewer注册任何内容。 一旦我换了一个网格,一切都运行良好......