0

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

然后,该用户控件包含许多显示 A 信息的控件,以及两个附加控件,每个控件一个用于 B 和 C,仅当显示的类属于相关类型时才可见。

然后,这些附加控件显示与其相应抽象类相关的所有字段,以及与具体类相关的附加控件,同样仅在基础类具有正确类型时才显示,然后具有与具体类相关的字段。

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

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

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

<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>

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

4

1 回答 1

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 对象的大小为零 - 因此在可见时没有向滚动查看器注册任何内容。一旦我把它换成网格,一切都很好......

于 2013-04-18T14:41:18.397 回答