2

Resizer (サイズ変更グリッパーを備えた ContentControl)内でエキスパンダーを使用していますが、コントロールが最初に表示されたときに適切に展開/折りたたみます。サイズを変更すると、以下に記載されているように、エキスパンダーが適切に折りたたまれません。アプリケーションで Snoop を実行しましたが、Expander またはその構成要素に高さが設定されていません。

Expander が再び適切に折りたたまれるようにするにはどうすればよいですか? または、Resizer を変更して Expander を悲しくさせないようにすることも同様に機能します。

エキスパンダーのドキュメントには次のように記載されています。

Expander が正しく機能するためには、ExpandDirection プロパティが Down または Up に設定されている場合は Expander コントロールに Height を指定しないでください。同様に、ExpandDirection プロパティが Left または Right に設定されている場合は、Expander コントロールに Width を指定しないでください。 Expander コントロールで、展開されたコンテンツが表示される方向にサイズを設定すると、サイズ パラメータで定義された領域が境界線で囲まれて表示されます. この領域は、ウィンドウが折りたたまれている場合でも表示されます. サイズを設定するには展開されたウィンドウの場合、コンテンツを囲む Expander コントロールまたは ScrollViewer のコンテンツにサイズ ディメンションを設定します。」

4

3 に答える 3

1

リサイザーをエキスパンダー内に移動することで問題を解決しましたが、他の場所でエキスパンダーの問題に遭遇したため、誰かがそれを持っている場合はまだ回答が必要です.

ありがとう

于 2008-10-01T20:34:44.277 に答える
1

それ以来、この特定の問題をモックアップする機会はありませんでしたが、最近、Height または Width を Double.NaN に設定すると、デフォルトの自由奔放な動作にリセットされることがわかりました。

皮肉なことに、これは私が最初に使用していた Resizer コントロールのコードを読んだことによるものです。

于 2009-02-08T17:24:26.923 に答える
1

これに答えるのが少し遅れました (2 年以上) が、ねえ、決して遅いよりは遅いほうがいいですよね?

とにかく、私はこの正確な問題に遭遇し、列幅を保存してリセットするコードビハインドで解決することができました.

3 列のグリッドがあり、最初の列にいくつかのコンテンツ、2 番目の列に GridSplitter、3 番目の列に Expander があります。GridSplitter が移動された後、Expander を含む列の幅が Auto から固定サイズに変更されているようです。これにより、エキスパンダーが期待どおりに折りたたまれなくなりました。

そこで、プライベート変数と 2 つのイベント ハンドラーを追加しました。

    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 にリセットします。

次に、エキスパンダーが展開されると、列を固定幅に戻して、折りたたむ前と同じ幅に展開します。

参照用の 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 に答える