15

作業中のWPFアプリでこれを機能させるのに問題があります。基本的に、私が求めているのは、MMCの作業ウィンドウのようなものです。

  • アプリには、ディスプレイの主要部分に3つの列があります。サイズ変更可能な右側の列が必要です。これは、GridSplitterでグリッドを使用することを意味すると思いますが、機能するものなら何でもかまいません。
  • アプリを閉じたときに右側の列の幅を保存し、アプリを開いたときにロードできるようにしたいのですが、これは初期サイズである必要があります。ユーザーはサイズを変更できる必要があります。
  • ウィンドウのサイズを変更するときは、左側の列と右側の列のサイズを同じに保ち、中央の列のサイズをウィンドウの幅に合わせて変更します。
  • 左側と右側の列の幅は最小である必要があります。右側の列のサイズを変更するときは、中央の列を小さくしたいのですが、左側の列は小さくしたくありません。
  • また、列の外側にあるトグルボタンを使用して右側の列の表示を切り替えられるようにしたいので、表示に戻ったときに以前と同じ幅にします。

私はXAMLとバインディングで可能な限り多くのことをしようとしています。

生クリーム、アイスクリーム、チョコチップをトッピングしてもらえますか?:-)

4

4 に答える 4

17

私があなたの要件を読んでいるとき、私はを考える代わりにGrid、を考えますDockPanel

<DockPanel>
    <Grid Name="right"
        DockPanel.Dock="Right" MinWidth="100" />
    <Grid Name="Left"
        DockPanel.Dock="Left" MinWidth="100" />
    <Grid Name="middle" />
</DockPanel>

rightサイズを変更する方法を作成すると、サイズmiddle変更されたとおりに変更されrightます。ウィンドウのサイズを変更すると、のみmiddleが変更されます。の保存と設定はWidthあなたright次第ですが、難しいことではありません。

ユーザーがサイズを変更できるようにすることに関してrightは、少し注意が必要ですが、この記事が役立つはずです。この他の記事はさらに役立つかもしれません。

の可視性についてはright、をに設定しVisibilityCollapsed非表示にし、に設定して復元することができますVisible

注:内部のパネルはsである必要はありませんが、それぞれGridに何らかの種類を使用する必要がありますPanelGrid現在の列の中にあるものは何でも問題なく動作するはずです。

于 2009-08-12T16:41:21.683 に答える
8

GridSplittersを使用してグリッドを使用しました。これにより、左右の列の幅を維持しながら、中央の列のサイズを簡単に変更できるようになりました。

XAML:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="MainWindow"
    Title="Main Window"
    Width="640" Height="480">

    <Grid>
        <Grid.ColumnDefinitions>
            <!-- Left column -->
                <ColumnDefinition Width="200" MinWidth="100"/>
                <!-- Left GridSplitter column -->
                <ColumnDefinition Width="5"/>
                <!-- Center column. A width of * means the column will fill
                     any remaining space. -->
                <ColumnDefinition Width="*"/>
                <!-- Right GridSplitter column -->
                <ColumnDefinition x:Name="RightSplitterColumn" Width="5"/>
                <!-- Right column -->
                <ColumnDefinition x:Name="RightColumn" Width="200"
                                  MinWidth="100"/>
                </Grid.ColumnDefinitions>
                <GridSplitter Grid.Column="1" HorizontalAlignment="Stretch" />
                <GridSplitter Grid.Column="3" HorizontalAlignment="Stretch" />
                <Button x:Name="ToggleButton" Grid.Column="2"
                        Content="Toggle Right Column" Width="150" Height="25"
                        Click="ToggleButton_Click" />
    </Grid>
</Window>

コードビハインド

右側の列を非表示にする場合、グリッド列には可視性プロパティがないため、列幅を0に設定します。

public partial class MainWindow : Window
{
    private double rightColumnWidth;
    private double rightColumnMinWidth;
    private bool rightColumnHidden;

    public MainWindow()
    {
        this.InitializeComponent();
    }

    private void ToggleButton_Click(object sender, RoutedEventArgs e)
    {
        if (rightColumnHidden)
        {
            // Restore the widths.
            RightColumn.MinWidth = rightColumnMinWidth;
            RightColumn.Width = new GridLength(rightColumnWidth);
            RightSplitterColumn.Width = new GridLength(5);
        }
        else
        {
            // Remember the user-set widths for the columns.
            rightColumnWidth = RightColumn.Width.Value;
            rightColumnMinWidth = RightColumn.MinWidth;

            // Remember to set the minimum width to 0 before changing the actual
            // width.
            RightColumn.MinWidth = 0;
            RightColumn.Width = new GridLength(0);
            RightSplitterColumn.Width = new GridLength(0);
        }

        rightColumnHidden = !rightColumnHidden;
    }
}

起動時の列幅の保存と復元については、幅変数を設定ファイルに保存し、アプリを再度開いたときに適用します。

于 2009-08-15T03:23:38.863 に答える
4

columndefinition WidthをAutoに設定し、その列内にコントロールを配置して、他の列にStarを指定します。コンテンツで列を非表示にする場合は常に、control.Visibility =Collapsedを設定します。列の幅はAutoであるため、その列と残りの列がスペースを占めることはありません。

于 2009-08-02T07:26:01.067 に答える
4

3年後、CodeProjectで別のアプローチを見つけることができます。

http://www.codeproject.com/Articles/437237/WPF-Grid-Column-and-Row-Hiding

カスタム列定義に「Visible」プロパティを追加します。

于 2013-07-08T11:16:46.593 に答える