2012-10-18 1 views
0

안녕하세요 친구 :) 그룹 상자 및 랩 패널을 처리하는 wpf 앱에서 작업 중입니다. 제목을 살펴보면 간단하지만 그룹 상자 집합을 동적으로 생성 한 후에는 어려움을 겪고 있습니다. 다음은 시나리오입니다.랩 패널 기능을 설정하지 못했습니다. 동적으로 생성 된 그룹 상자

내 프로젝트에 2 개의 xaml 파일이 있습니다. 하나는 CodecView.xamlCodecWidgetView.xaml입니다.

CodecView.xaml :

<UserControl.Resources> 
    <DataTemplate x:Key="CWDataTemplate"> 
     <WrapPanel> 
      <TextBlock Text="{Binding Description}" Margin="0,0,0,0"/> 
      <local:CodecWidgetView Margin="5,10,5,5"/> 
     </WrapPanel> 
    </DataTemplate> 
</UserControl.Resources> 

<Grid Grid.Row="0" >   
     <Grid Name="NumberofCodecs" > 
      <ItemsControl ItemTemplate="{StaticResource CWDataTemplate}" ItemsSource="{Binding CodecWidgets}"/> 
     </Grid>    
    </Grid> 

CodecWidgetView.xaml :

<Grid> 
    <GroupBox Height="Auto" HorizontalAlignment="Stretch" Margin="5,5,5,5" Name="groupBox1" VerticalAlignment="Stretch" Width="Auto"> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition /> 
       <RowDefinition /> 
       <RowDefinition /> 
       <RowDefinition /> 
      </Grid.RowDefinitions> 

      <Grid Grid.Row="0"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
       </Grid.ColumnDefinitions> 
       <ToggleButton Name="FrequencyBox" Content="Master" Grid.Column="1" Height="25" Width="50" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0" /> 
       <ComboBox Grid.Column="2" ItemsSource="{Binding ModesList}" SelectedItem="{Binding SelectedModesList, Mode=OneWayToSource}" SelectedIndex="2" Height="23" HorizontalAlignment="Center" Margin="0,0,0,0" Name="comboBox2" VerticalAlignment="Center" Width="80" /> 
       <ComboBox Grid.Column="0" ItemsSource="{Binding FrequencyList}" SelectedItem="{Binding SelectedFrequencyList, Mode=OneWayToSource}" SelectedIndex="0" Height="23" HorizontalAlignment="Center" Margin="0,0,0,0" Name="comboBox1" VerticalAlignment="Center" Width="80" /> 
      </Grid> 

      <Grid Grid.Row="1"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
       </Grid.ColumnDefinitions> 
       <RadioButton Style="{StaticResource {x:Type ToggleButton}}" Command="{Binding OneSixBitCommand}" Margin="0" Content="16 Bit" Name="OneSixBit" Height="25" Width="45" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
       <RadioButton Style="{StaticResource {x:Type ToggleButton}}" Command="{Binding TwoZeroBitCommand}" Margin="0" Content="20 Bit" Name="TwoZeroBit" Height="25" Width="45" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
       <RadioButton Style="{StaticResource {x:Type ToggleButton}}" Command="{Binding TwoFourBitCommand}" Margin="0" Content="24 Bit" Name="TwoFourBit" Height="25" Width="45" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
       <RadioButton Style="{StaticResource {x:Type ToggleButton}}" Command="{Binding ThreeTwoBitCommand}" Margin="0" Content="32 Bit" Name="ThreetwoBit" Height="25" Width="45" Grid.Column="3" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
      </Grid> 

      <Grid Grid.Row="2"> 
       <Label Name="BitDelay" Content="Bit Delay" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,205,0" Height="25" Width="55" /> 
       <Slider Height="23" HorizontalAlignment="Center" Minimum="0.0" Maximum="255.0" TickFrequency="1.0" Margin="95,0,0,0" Name="bitdelayslider" VerticalAlignment="Center" Width="160" /> 
       <TextBox Name="BitDelayValue" IsReadOnly="True" Text="{Binding ElementName=bitdelayslider,Path=Value, StringFormat=0.0}" Width="40" Height="20" Margin="0,0,110,0" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
      </Grid> 

      <Grid Grid.Row="3"> 
       <Label Name="DBGain" Content="DB Gain" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,205,0" Height="25" Width="55" /> 
       <TextBox Name="DBGainValue" IsReadOnly="True" Text="{Binding ElementName=dbgainslider,Path=Value, StringFormat=0.0}" Width="40" Height="20" Margin="0,0,110,0" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
       <Slider Height="23" HorizontalAlignment="Center" Minimum="0.0" Maximum="59.5" TickFrequency="0.5" Margin="95,0,0,0" Name="dbgainslider" VerticalAlignment="Center" Width="160" /> 
      </Grid> 
     </Grid> 
    </GroupBox> 
</Grid> 

CodecViewModel.cs :는 뷰 모델입니다 다음과 같이 동적으로 시작 4 groupboxes를 생성 한 CodecView.xaml 클래스

,512,457,903,913,210

CodecWidgetViewModel.cs :는 CodecWidgetView.xaml

시작 동적 4 groupboxes 다른 하나 아래에 생성
private string _description; 
    public string Description 
    { 
     get 
     { 
      return _description; 
     } 

     set 
     { 
      _description = value; 
      OnPropertyChanged("Description"); 
     } 
    } 

이 뷰 모델의 클래스이다. 내 windowsize는 minheight = 300이고 minwidth = 300이므로 scrollviewer를 설정했습니다. Wrappanel을 사용 했으므로 스트레치 할 때 예상대로 작동해야합니다. 너비가 늘어 났을 때 두 번째 그룹 상자는 첫 번째 행의 오른쪽으로 이동해야하며 아래에서도 마찬가지입니다.

시작에

:On Startup

폭이 뻗어 경우 :enter image description here

예상되는 동작 : 따라서 예상되는 동작을보고enter image description here

, 내가 wrappanel의 동작을 달성 할 :) 비록 내가 wrappanel을 사용했지만 예상대로 wrk하지 않습니다. 제발 도와주세요 :)

답변

1

ItemsSource에서 각 개별 항목의 패널로 WrapPanel을 사용했습니다. 원하는 항목을 선택하지 않았습니다.

대신 WrapPanel을 모든 자식에 대한 패널로 사용하도록 ItemsControl에 명시해야합니다.

+0

위 코드를 사용하여 기존 코드로 바꿨습니다. UserControl Resources에서 WrapPanel을 제거하고 Stackpanel을 추가했습니다. 그것은 예상대로 작동 :) 감사합니다 :) – StonedJesus