2011-05-02 2 views
0

내 인생에서 나는 그리드 스플리터 컨트롤이 원하는대로 작동하지 못한다.동적 레이아웃에서 gridsplitter를 사용하는 방법은 무엇입니까?

아래 레이아웃에서 각 목록보기의 오른쪽에 gridspliter가 필요합니다. 그러면 목록보기가 확장되거나 축소되어 다른 목록보기의 크기가 적절하게 조정됩니다.

확장기 및 해당 (녹색) 패널의 크기가 조정되지 않아야합니다.

도와주세요! 이 컨트롤은 나를 미치게합니다.

MainWindow.xaml :

<Window x:Class="LayoutTest.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Window2" Height="400" MinWidth="1000"> 
    <Grid Name="root" SizeChanged="root_SizeChanged"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition MinWidth="200" Width="*" /> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition MinWidth="200" Width="*" /> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition MinWidth="200" Width="*" /> 
      <ColumnDefinition Width="Auto" /> 
     </Grid.ColumnDefinitions> 
     <ListView Grid.Column="0" MinWidth="100"> 
      <ListViewItem>a</ListViewItem> 
      <ListViewItem>b</ListViewItem> 
      <ListViewItem>c</ListViewItem> 
      <ListViewItem>d</ListViewItem> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="a" Width="100" /> 
        <GridViewColumn Header="b" Width="100" /> 
        <GridViewColumn Header="c" Width="100" /> 
        <GridViewColumn Header="d" Width="100" /> 
       </GridView> 
      </ListView.View> 
     </ListView> 
     <Expander Name="xleft" Grid.Column="1" ExpandDirection="Left" Expanded="Expanded"> 
      <Border MinWidth="300" Width="300" Background="Green" > 
       <TextBlock Text="{Binding ElementName=root,Path=ActualWidth}" /> 
      </Border> 
     </Expander> 
     <ListView Grid.Column="2" MinWidth="100"> 
      <ListViewItem>a</ListViewItem> 
      <ListViewItem>b</ListViewItem> 
      <ListViewItem>c</ListViewItem> 
      <ListViewItem>d</ListViewItem> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="a" Width="100" /> 
        <GridViewColumn Header="b" Width="100" /> 
        <GridViewColumn Header="c" Width="100" /> 
        <GridViewColumn Header="d" Width="100" /> 
       </GridView> 
      </ListView.View> 
     </ListView> 
     <Expander Name="xmiddle" Grid.Column="3" ExpandDirection="Left" Expanded="Expanded"> 
      <Border MinWidth="300" Width="300" Background="Green" > 
       <TextBlock Text="{Binding ElementName=root,Path=ActualWidth}" /> 
      </Border> 
     </Expander> 
     <ListView Grid.Column="4" MinWidth="100"> 
      <ListViewItem>a</ListViewItem> 
      <ListViewItem>b</ListViewItem> 
      <ListViewItem>c</ListViewItem> 
      <ListViewItem>d</ListViewItem> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="a" Width="100" /> 
        <GridViewColumn Header="b" Width="100" /> 
        <GridViewColumn Header="c" Width="100" /> 
        <GridViewColumn Header="d" Width="100" /> 
       </GridView> 
      </ListView.View> 
     </ListView> 
     <Expander Name="xright" Grid.Column="5" ExpandDirection="Left" Expanded="Expanded"> 
      <Border MinWidth="300" Width="300" Background="Green" > 
       <TextBlock Text="{Binding ElementName=root,Path=ActualWidth}" /> 
      </Border> 
     </Expander> 
    </Grid> 
</Window> 

MainWindow.xaml.cs를 :

using System.Windows; 
using System.Windows.Controls; 

namespace LayoutTest 
{ 
    /// <summary> 
    /// Interaction logic for Window2.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     Expander[] expanders; 
     Expander priority; 

     public MainWindow() 
     { 
      InitializeComponent(); 
      expanders = new Expander[] {xleft,xmiddle,xright}; 
     } 

     private void Expanded(object sender, RoutedEventArgs e) 
     { 
      if (sender is Expander) priority = sender as Expander; 
      if (root.ActualWidth > this.ActualWidth) 
      { 
       foreach (Expander ep in expanders) 
       { 
        if (ep.IsExpanded && priority != null && !ep.Name.Equals(priority.Name)) 
        { 
         ep.IsExpanded = false; 
         break; 
        } 
       } 
      } 
     } 

     private void root_SizeChanged(object sender, SizeChangedEventArgs e) 
     { 
      Expanded(null,new RoutedEventArgs()); 
     } 
    } 
} 
+0

가 어디 이 전체 코드에서 [GridSplitter] (http://msdn.microsoft.com/en-us/library/system.windows.controls.gridsplitter.aspx)? 그리드 스플리터가 필요하거나 단순히 목록보기 영역을 축소하고 확장하고 싶습니까 (기본적으로 목록보기 숨기기/표시)? – publicgk

+0

>> "각 목록보기의 오른쪽에 격자 표식이 필요합니다. 그러면 목록보기를 확장하거나 축소하고 다른 목록보기의 크기를 적절하게 조정할 수 있습니다." 위 코드에서 아무 것도 작동하지 않기 때문에 하나를 추가하지 않았습니다. – DaveO

+0

GridSplitter가 작동하면 Expanders를 제거 할 수 있습니까? – publicgk

답변

0

그것은 이상적인 건 아니지만, 이것이 내가 함께 갈거야 솔루션입니다 :

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" MinWidth="100" /> 
     <ColumnDefinition Width="Auto" /> 

     <ColumnDefinition Width="*" MinWidth="100" /> 
     <ColumnDefinition Width="Auto" /> 

     <ColumnDefinition Width="*" MinWidth="100" /> 
     <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 
    <Border Grid.Column="0" Background="Green"> 
    </Border> 
    <Expander Name="ex1" Grid.Column="1" ExpandDirection="Left" Expanded="ex_Expanded"> 
     <Border Background="Blue" MinWidth="200" MaxWidth="200"> 
     </Border> 
    </Expander> 
    <GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Left" ResizeBehavior="PreviousAndNext" VerticalAlignment="Stretch" Background="Red" /> 
    <GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Right" ResizeBehavior="PreviousAndNext" VerticalAlignment="Stretch" Background="Red" /> 
    <Border Grid.Column="2" Background="Green"> 
    </Border> 
    <Expander Name="ex2" Grid.Column="3" ExpandDirection="Left" Expanded="ex_Expanded"> 
     <Border Background="Blue" MinWidth="200" MaxWidth="200"> 
     </Border> 
    </Expander> 
    <GridSplitter Grid.Column="3" Width="5" HorizontalAlignment="Left" ResizeBehavior="PreviousAndNext" VerticalAlignment="Stretch" Background="Red" /> 
    <GridSplitter Grid.Column="3" Width="5" HorizontalAlignment="Right" ResizeBehavior="PreviousAndNext" VerticalAlignment="Stretch" Background="Red" /> 
    <Border Grid.Column="4" Background="Green"> 
    </Border> 
    <Expander Name="ex3" Grid.Column="5" ExpandDirection="Left" Expanded="ex_Expanded"> 
     <Border Background="Blue" MinWidth="200" MaxWidth="200"> 
     </Border> 
    </Expander> 
</Grid> 
관련 문제