2011-08-06 4 views
1

오리피스가 세로 인 경우 그리드의 여백은 "140,25,5,0"이어야하고 스택 패널의 너비는 320보다 작아야합니다. 방향이 가로 여백 인 경우 "350,25,5,0"및 stackpanel의 너비는 450입니다. 어떻게하면 WP7에서 대화보기와 같은 dinamically 변경할 수 있습니까?여백 및 오리 엔테이션 변경 wp7

<Grid x:Name="LayoutRoot" > 
     <ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled" x:Name="listmy"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
      <local:TypeMessage Content="{Binding}"> 
       <local:TypeMessage.Me> 
       <DataTemplate> 
        <Grid HorizontalAlignment="Right" Margin="350,25,5,0"> 
        <TextBlock HorizontalAlignment="Right" Margin="0,-25,30,0" TextWrapping="Wrap" Text="Вы" VerticalAlignment="Top"/> 
        <StackPanel Background="{StaticResource PhoneAccentBrush}" Width="320"> 
         <TextBlock TextWrapping="Wrap" Foreground="{Binding read_state, Converter={StaticResource ReadConverter}}" Text="{Binding text}" Margin="5,3" /> 
         <TextBlock Text="{Binding date_time}" TextAlignment="Right" Margin="5,0"/> 
        </StackPanel> 
        <Path Data="m 0,0 l 16,0 l 0,16 l -16,-16" 
        Fill="{StaticResource PhoneAccentBrush}" 
        HorizontalAlignment="Right" UseLayoutRounding="False" d:LayoutOverrides="VerticalAlignment, GridBox" Height="16" VerticalAlignment="Top" Margin="0,-15.167,8.757,0" RenderTransformOrigin="0.5,0.5"> 
         <Path.RenderTransform> 
          <CompositeTransform Rotation="91.157"/> 
         </Path.RenderTransform> 
        </Path> 
        </Grid> 
       </DataTemplate> 
       </local:TypeMessage.Me> 
       <local:TypeMessage.You> 
       <DataTemplate> 
        <Grid Margin="5,25,30,0" > 
        <Path Data="m 0,0 l 0,16 l 16,0 l -16,-16" 
        Fill="{StaticResource PhoneAccentBrush}" 
        Margin="9.5,-16,0,0" UseLayoutRounding="False" Height="16" VerticalAlignment="Top" d:LayoutOverrides="VerticalAlignment" HorizontalAlignment="Left"/> 
        <StackPanel Background="{StaticResource PhoneAccentBrush}" Width="320"> 
         <TextBlock TextWrapping="Wrap" Foreground="{Binding read_state,Converter={StaticResource ReadConverter}}" Text="{Binding text}" /> 
         <TextBlock TextAlignment="Right" Text="{Binding date_time}" /> 
        </StackPanel> 
        <TextBlock HorizontalAlignment="Left" Margin="28,-27,0,0" TextWrapping="Wrap" Text="{Binding author_name}" VerticalAlignment="Top"/> 
        </Grid> 
       </DataTemplate> 
       </local:TypeMessage.You> 
      </local:TypeMessage> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
     </ListBox> 
    </Grid> 

답변

0

이 있습니다 (OnOrientationChanged 경우에) 방향의 변화를 감지하고 그에 따라 여백을 조정할 수 있습니다.

많은 항목을 다루는 측면에서.
항목이 동일한 여백을 공유하는 경우 값을 바인딩하고 이벤트 처리기에서 VM을 업데이트 할 수 있습니다.
모든 것이 다른 여백을 가지고 있다면 각 방향에 대해 다른 템플리트를 사용하는 것이 적절할 수 있습니다.
대체로 유동적 인 레이아웃으로 이동할 수 있습니다. 실제 디자인이 무엇인지 보지 않아도 이것이 얼마나 적합한 지 말할 수는 없습니다.

+0

약 20 개 품목이 있다면 어떻게 할 수 있습니까? – SevenDays