将Expander重置为默认崩溃行为

时间:2008-10-01 20:08:00

标签: wpf expander

我正在Resizer内部使用扩展器(带有调整大小抓手的ContentControl),并且当控件最初出现时它会正确扩展/折叠。一旦我调整它的大小,扩展器就不会正常崩溃,如下所述。我在我的应用程序上运行了Snoop,我没有看到Expander或其组成部分的任何高度。

我如何才能说服Expander再次正常崩溃?或者修改Resizer以使扩展器不会让人感到悲伤。

Expander文档说:

  

“为了使Expander正常工作,当ExpandDirection属性设置为Down或Up时,不要在Expander控件上指定高度。同样,当ExpandDirection属性设置为Left时,不要在Expander控件上指定Width或者右键。当您在展开扩展内容的方向上在Expander控件上设置大小时,将显示由size参数定义的区域,并在其周围显示边框。即使窗口折叠,此区域也会显示。设置展开窗口的大小,在Expander控件或包含内容的ScrollViewer的内容上设置大小尺寸。“

4 个答案:

答案 0 :(得分:1)

我通过在扩展器中移动Resizer解决了这个问题,但我在其他地方遇到了扩展器问题,所以如果有人有这个问题仍然会有答案。

感谢

答案 1 :(得分:1)

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

具有讽刺意味的是,这是因为我首先阅读了我正在使用的Resizer控件的代码。

答案 2 :(得分: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;
    }

当展开器折叠时,我保存了Column2的固定宽度(在某处某处自动神奇地自动改变了),然后将宽度重置为自动。

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

以下是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>

答案 3 :(得分:0)

我在使用GridSplitter的Grid中使用Expander遇到了类似的问题。扩展/折叠行为正常,直到我移动拆分器......然后,扩展器不会崩溃,它只隐藏其内容。

我还在寻找一种解决方法......你最终找到了吗?