2

我在Resizer(带有调整大小抓手的 ContentControl)中使用了扩展器,当控件最初出现时,它会正确展开/折叠。一旦我调整它的大小,Expander 将不会正确折叠,如下所述。我在我的应用程序上运行了 Snoop,但我没有看到 Expander 或其组件上设置的任何高度。

我将如何说服 Expander 再次正确折叠?或者修改 Resizer 以不让 Expander 悲伤也可以。

扩展器文档说:

"要使 Expander 正常工作,当 ExpandDirection 属性设置为 Down 或 Up 时,不要在 Expander 控件上指定 Height。类似地,当 ExpandDirection 属性设置为 Left 或 Right 时,不要在 Expander 控件上指定 Width。当您在 Expander 控件上设置展开内容显示方向的大小时,由 size 参数定义的区域将显示为带有边框。该区域即使在窗口折叠时也会显示。设置大小展开的窗口,在 Expander 控件的内容或包含内容的 ScrollViewer 上设置大小尺寸。”

4

3 回答 3

1

我通过在 Expander 中移动 Resizer 解决了这个问题,但是我在其他地方遇到了 Expander 问题,所以如果有人有它,我仍然希望得到答案。

谢谢

于 2008-10-01T20:34:44.277 回答
1

从那以后我没有机会模拟这个特定的问题,但我最近发现将 Height 或 Width 设置为 Double.NaN 会将其重置为其默认的自由奔放的行为。

具有讽刺意味的是,这是来自阅读我最初使用的 Resizer 控件的代码。

于 2009-02-08T17:24:26.923 回答
1

回答这个问题有点晚(2 年以上),但是,嘿,迟到总比没有好,对吧?

无论如何,我遇到了这个确切的问题,并且能够通过一些代码隐藏来解决它以保存和重置列宽。

我有一个 3 列网格,第一列中有一些内容,第二列中有 GridSplitter,第三列中有 Expander。看起来正在发生的事情是,在移动 GridSplitter 后,包含 Expander 的列的宽度从 Auto 更改为固定大小。这会导致 Expander 不再按预期折叠。

因此,我添加了一个私有变量和两个事件处理程序:

    private GridLength _columnWidth;

    private void Expander_Expanded (object sender, RoutedEventArgs e)
    {
        // restore column fixed size saved in Collapse event
        Column2.Width = _columnWidth;
    }

    private void Expander_Collapsed (object sender, RoutedEventArgs e)
    {
        // save current column width so we can restore when expander is expanded
        _columnWidth = Column2.Width;

        // reset column width to auto so the expander will collapse properly
        Column2.Width = GridLength.Auto;
    }

当 Expander 折叠时,我保存 Column2 的固定宽度(在后台某处从 Auto 自动更改),然后将宽度重置为 Auto。

然后,当展开器展开时,我将列恢复为固定宽度,使其展开到与折叠前相同的宽度。

这是供参考的 XAML:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition x:Name="Column2" Width="Auto" />
    </Grid.ColumnDefinitions>
    <ScrollViewer Grid.Column="0" VerticalScrollBarVisibility="Auto">
        <!-- some content goes here -->
    </ScrollViewer>
    <GridSplitter HorizontalAlignment="Right" VerticalAlignment="Stretch"
         Grid.Column="1" ResizeBehavior="PreviousAndNext" Width="5"
         Background="Black" />
    <Expander Grid.Column="2" ExpandDirection="Left"
         IsExpanded="True" Style="{StaticResource LeftExpander}"
         Expanded="Expander_Expanded" Collapsed="Expander_Collapsed">
        <Grid>
            <TextBox TextWrapping="Wrap" Height="Auto" Margin="0 5 5 5" />
        </Grid>
    </Expander>
</Grid>
于 2010-12-14T16:41:35.380 回答