2011-08-06 15 views
1

私は20項目のリストボックスを持っています。向きがポートレートの場合、グリッドのマージンは「140,25,5,0」で、スタックパネルの幅は320内にあります 向きが横長の場合は余白が必要です"350,25,5,0"とstackpanelの幅は450です。私はWP7での会話のようなdinamically変更することができますか?余白と方向OrientationChanged 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

関連する問題