如何以编程方式更改列表框W8 / WP中的文本块边距

时间:2013-07-15 09:12:54

标签: windows-phone-7 windows-8

因为我是Windows Phone应用程序的新手,面对这个问题,如果有人提出他们有价值的答案会很有帮助。我在TextBlock内的网格中有2个ListBox。但我需要以编程方式更改第二个文本块的边距,因为如果应用程序在更大的屏幕上运行,则第二个文本块会被错第一个文本块应该对齐到左边第二个文本块应该对齐到右边但是当我在textblock中设置时不能正常工作所以我需要更改边距。

图片在这里:https://dl.dropboxusercontent.com/u/40039421/Untitled-1.png

 <Grid Grid.Row="2" Grid.Column="0">
    <ListBox x:Name="lbToday" FontSize="13" Tapped="lbToday_Tapped"
             HorizontalContentAlignment="Left" HorizontalAlignment="Left">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <TextBlock x:Name="tbTodaySubjectName" Foreground="#FF02416C"
                               Text="Aplikovana inforatika" HorizontalAlignment="Left"
                               Margin="0,0,75,0" />
                    <TextBlock x:Name="tbSubjectHourStart" Foreground="#FF02416C" Text="10:30"
                               HorizontalAlignment="Right" Padding="0,0,0,0" />
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

2 个答案:

答案 0 :(得分:0)

我猜你没有使用MVVM,因为这对于这种情况来说是理想的,从我在你的问题中理解的,你想要以编程的方式改变文本块的边界。

您可以使用转换器或仅绑定到codebehind属性。

<TextBlock x:Name="tbSubjectHourStart" Margin={Binding ControlMargin} Foreground="#FF02416C" Text="10:30"
                           HorizontalAlignment="Right" Padding="0,0,0,0" />

在代码隐藏页面构造函数中,设置数据上下文

public MainPage()
    {
        InitializeComponent();

        DataContext = this;
    }

你应该也可以设置一次屏幕大小的标志

//This should be changed to reflect your detection code
private bool isBigScreen = true;

设置绑定边距属性,该属性为System.Windows.Thickness类型

public System.Windows.Thickness ControlMargin
    {
        get
        {
            return isBigScreen ? new  System.Windows.Thickness(10, 10, 10, 10) : new System.Windows.Thickness(10, 10, 10, 10);
        }
    }

如果您想要转换方式,请告诉我们

答案 1 :(得分:0)

您可以通过将内部网格设为2列并在其自己的列中包含每个TextBox来解决您的问题。这样你就不需要在运行时改变任何东西,布局就可以了。

<ListBox>
  <ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    </Style>
  </ListBox.ItemContainerStyle>
  <ListBox.ItemTemplate>
    <DataTemplate>
      <Grid>
        <Grid.ColumnDefinitions>
          <ColumnDefinition />
          <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <TextBlock HorizontalAlignment="Left" />
        <TextBlock HorizontalAlignment="Right" Grid.Column="1" />
      </Grid>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>