0

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

图片在这里: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>
4

2 回答 2

0

我猜你没有使用 MVVM,因为这对于这种情况来说是理想的,根据我在你的问题中的理解,你希望在绑定时以编程方式更改文本块的边距。

您可以为此使用转换器或仅绑定到代码隐藏属性。

<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);
        }
    }

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

于 2013-07-15T11:00:35.063 回答
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>
于 2013-07-15T11:13:52.117 回答