2013-07-15 2 views
0

, поскольку я новичок в приложении Windows Phone, столкнувшись с этой проблемой, будет полезно, если кто-то предложит их ценный ответ. У меня есть 2 TextBlock в сетке внутри ListBox. Но мне нужно программно изменить маржу второго текстового блока, потому что если приложение работает на большом экране, второй текстовый блок плохо согласован. Первый текстовый блок должен быть выровнен по левому второму текстовому блоку, который должен быть выровнен по правому краю, но когда я установлен в текстовый блок, он не работает, поэтому мне нужен запас изменений.Как программно изменить поле текстового блока внутри списка W8/WP

Изображение здесь: 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> 
+0

Пожалуйста, предложите способ отображения текстового поля, загрузив изображение. это не понятно вашим кодом. –

ответ

0

Вы можете решить вашу проблему, сделав свою внутреннюю сетку двумя столбцами и разместив их в каждом столбце 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> 
+0

thx Alaa Masoud это идеальное решение, также FunksMaName благодарит вас за вашу готовность. –

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

сообщите нам, если вы хотите конвертерный путь,

Смежные вопросы