2013-06-05 53 views
0

的網格我有內容的邊境綁定像這樣的WinRT-XAML替代文本框

<Border BorderBrush="White" BorderThickness="1" Margin="0"> 
    <TextBlock TextWrapping="Wrap" FontSize="29.333" Text="{Binding TextArray[0][0], Mode=OneWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0"/> 
</Border> 
<Border BorderBrush="White" BorderThickness="1" Margin="0" Grid.Column="1"> 
    <TextBlock TextWrapping="Wrap" FontSize="29.333" Text="{Binding TextArray[0][1], Mode=OneWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0"/> 
</Border> 
<Border BorderBrush="White" BorderThickness="1" Margin="0" Grid.Column="2"> 
    <TextBlock TextWrapping="Wrap" FontSize="29.333" Text="{Binding TextArray[0][2], Mode=OneWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0"/> 
</Border> 
<Border BorderBrush="White" BorderThickness="1" Margin="0" Grid.Row="1" Grid.Column="0"> 
    <TextBlock TextWrapping="Wrap" FontSize="29.333" Text="{Binding TextArray[1][0], Mode=OneWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0"/> 
</Border> 
<Border BorderBrush="White" BorderThickness="1" Margin="0" Grid.Row="1" Grid.Column="1"> 
    <TextBlock TextWrapping="Wrap" FontSize="29.333" Text="{Binding TextArray[1][1], Mode=OneWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0"/> 
</Border> 
<Border BorderBrush="White" BorderThickness="1" Margin="0" Grid.Row="1" Grid.Column="2"> 
    <TextBlock TextWrapping="Wrap" FontSize="29.333" Text="{Binding TextArray[1][2], Mode=OneWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0"/> 
</Border> 
<Border BorderBrush="White" BorderThickness="1" Margin="0" Grid.Row="2" Grid.Column="0"> 
    <TextBlock TextWrapping="Wrap" FontSize="29.333" Text="{Binding TextArray[2][0], Mode=OneWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0"/> 
</Border> 
<Border BorderBrush="White" BorderThickness="1" Margin="0" Grid.Row="2" Grid.Column="1"> 
    <TextBlock TextWrapping="Wrap" FontSize="29.333" Text="{Binding TextArray[2][1], Mode=OneWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0"/> 
</Border> 
<Border BorderBrush="White" BorderThickness="1" Margin="0" Grid.Row="2" Grid.Column="2"> 
    <TextBlock TextWrapping="Wrap" FontSize="29.333" Text="{Binding TextArray[2][2], Mode=OneWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0"/> 
</Border> 

內文本框的網格這是罰款一小格,但會有很多拷貝粘貼並替換大網格的值。有一個更好的方法嗎?

+0

「邊框內的TextBox網格」。我只在Border元素內看到一個TextBlock。發佈您的網格xaml代碼。 – letiagoalves

+0

由於無法垂直對齊TextBlock中的文本,因此它更多的是每個帶有TextBlock的邊框網格。我編輯帖子以包含整個3x3網格。 – Danson

+0

您可以以編程方式將文本塊元素添加到網格。 [喜歡這裏](http://stackoverflow.com/questions/5583954/filling-grid-with-textboxes-programmatically-in-wpf) – sraok

回答

2

簡單的解決方案,停止使用那些瘋狂的TextArrays。讓我們假裝你真的有一個像你展示的陣列。爲什麼不讓你的生活更輕鬆?

從簡化數據開始!

string[][] _Data = new[] 
    { 
     new string[] { "A", "B", "C" }, 
     new string[] { "1", "2", "3" } 
    }; 
var _NewData = 
    from d in _Data 
    select new 
    { 
     One = d[0], 
     Two = d[1], 
     Three = d[2] 
    }; 
this.DataContext = _NewData; 

然後你就可以簡化您的XAML:

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> 
    <ItemsControl ItemsSource="{Binding}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Grid Width="600"> 

        <Grid.Resources> 
         <Style TargetType="Border"> 
          <Setter Property="BorderBrush" Value="White" /> 
          <Setter Property="BorderThickness" Value="1" /> 
          <Setter Property="Margin" Value="0" /> 
         </Style> 
         <Style TargetType="TextBlock"> 
          <Setter Property="TextWrapping" Value="Wrap" /> 
          <Setter Property="FontSize" Value="29.333" /> 
          <Setter Property="HorizontalAlignment" Value="Center" /> 
          <Setter Property="VerticalAlignment" Value="Center" /> 
          <Setter Property="Margin" Value="0" /> 
         </Style> 
        </Grid.Resources> 

        <Grid.ColumnDefinitions> 
         <ColumnDefinition /> 
         <ColumnDefinition /> 
         <ColumnDefinition /> 
        </Grid.ColumnDefinitions> 

        <!-- first record --> 
        <Border Grid.Column="0"> 
         <TextBlock Text="{Binding One}" /> 
        </Border> 

        <!-- second record --> 
        <Border Grid.Column="1"> 
         <TextBlock Text="{Binding Two}" /> 
        </Border> 

        <!-- third record --> 
        <Border Grid.Column="2"> 
         <TextBlock Text="{Binding Three}" /> 
        </Border> 

       </Grid> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</Grid> 

現在有ZERO冗餘。 XAML是爲了使用。

祝你好運!