【问题标题】:Margin and OrientationChanged wp7边距和方向已更改 wp7
【发布时间】:2011-08-09 15:52:39
【问题描述】:

我有一个包含约 20 个项目的列表框。如果方向是纵向的,则网格的边距必须为“140,25,5,0”,堆栈面板的宽度在 320 内 如果方向是横向边距必须为“350,25,5,0”并且堆栈面板的宽度为 450。我如何动态更改它,例如 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>

【问题讨论】:

    标签: silverlight xaml windows-phone-7


    【解决方案1】:

    您可以检测到方向变化(在OnOrientationChanged 事件中)并相应地调整边距。

    在处理大量项目方面。
    如果项目共享相同的边距,您可以绑定值并在事件处理程序中更新 VM。
    如果所有内容都有不同的边距,则可能适合为每个方向使用不同的模板。
    或者,您可以考虑转向更流畅的布局。 在没有看到实际设计应该是什么的情况下,很难说这可能有多合适。

    【讨论】:

    • 如果我有大约 20 件商品?如何更改所有商品的边距>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 2018-07-20
    • 2012-01-05
    相关资源
    最近更新 更多