2017-01-21 14 views
0

wpfで水平分割と垂直分割の切り替えを行う良い方法を提案できますか?私は私のインターフェイスに2つの領域があります。ドラッグ可能なセパレータで区切り、水平と垂直の分割を切り替えるボタンがあるようにします。私はAvalonDockでそれをやろうとしましたが、何らかの理由でそれがうまくいかなかったのです。ここに私の質問がある、誰もまだ答えた。 prev. questionWPFの水平分割と垂直分割の切り替え

別のライブラリ、または標準のGridSplitterで簡単に行うことができますか?

+0

複数の同じ質問をしないでください。それに加えて、ライブラリの推奨事項を尋ねるのは、StackOverflowのトピック外です。 – Clemens

+0

@クレメンスそれは同じ質問ではありません。前の1つは、私が持っていたある間違いです。それを解決する方法を誰も知らないので、私はそれを作る他の方法について尋ねました。 –

答えて

0

私は、実行時にグリッドの行と列を再定義するのに合理的にクリーンな方法がないとは知りません。 RowDefinitionsとColumnDefinitionsを再定義するコードと、グリッドの子のGrid.RowとGrid.Column添付プロパティを更新するコードが必要になります。このような再構成にグリッドがどれだけうまく対応しているかわかりません。いくつかのものを手動で無効にする必要があるかもしれません。グリッドを再構成するのに必要なすべてのステップを実装していないライブラリが使用されていると思われます。

ただし、あらかじめ設定されたグリッドを別のグリッドに置き換えるのは比較的簡単です。両方のグリッドを同じ場所に置き、現在使用されていないグリッドの表示を折りたたむように設定します。

0

私はちょうど同様の問題に遭遇しました。 BoolConverterはIValueConverterをある

<ContentControl> 
    <ContentControl.Resources> 
     <BoolConverter x:Key="BoolToLayoutConverter" TrueValue="templateHorizontal" FalseValue="templateVertical"/> 
     <BoolConverter x:Key="BoolToLayoutCharacterConverter" TrueValue="—" FalseValue="|"/> 
     <DataTemplate x:Key="mainTable"> 
      <StackPanel> 
       <Label Content="MainTable goes here"/> 
       <ToggleButton Content="{Binding LayoutHorizontal, Converter={StaticResource BoolToLayoutCharacterConverter}}" 
         IsChecked="{Binding LayoutHorizontal}"/> 
      </StackPanel> 
     </DataTemplate> 
     <DataTemplate x:Key="childTables"> 
      <Label Content="ChildTables go here"/> 
     </DataTemplate> 
    </ContentControl.Resources> 
    <ContentControl.Style> 
     <Style TargetType="ContentControl"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding LayoutHorizontal}" Value="False"> 
        <Setter Property="ContentTemplate"> 
         <Setter.Value> 
          <DataTemplate> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition/> 
             <ColumnDefinition Width="10"/> 
             <ColumnDefinition/> 
            </Grid.ColumnDefinitions> 
            <ContentPresenter Grid.Column="0" ContentTemplate="{StaticResource mainTable}"/> 
            <GridSplitter Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
            <ContentPresenter Grid.Column="2" ContentTemplate="{StaticResource childTables}"/> 
           </Grid> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding LayoutHorizontal}" Value="True"> 
        <Setter Property="ContentTemplate"> 
         <Setter.Value> 
          <DataTemplate> 
           <Grid> 
            <Grid.RowDefinitions> 
             <RowDefinition/> 
             <RowDefinition Height="5"/> 
             <RowDefinition/> 
            </Grid.RowDefinitions> 
            <ContentPresenter Grid.Row="0" ContentTemplate="{StaticResource mainTable}"/> 
            <GridSplitter Grid.Row="1" Height="10" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/> 
            <ContentPresenter Grid.Row="2" ContentTemplate="{StaticResource childTables}"/> 
           </Grid> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ContentControl.Style> 
</ContentControl> 

:ここで私は、いくつかの良いアイデアhereのおかげで、それを解決する方法です。コードの後ろに:

private bool _layoutHorizontal = true; 
public bool LayoutHorizontal 
{ 
    get { return _layoutHorizontal; } 
    set 
    { 
     _layoutHorizontal = value; 
     NotifyPropertyChanged(); 
    } 
} 
関連する問題