WinRT-XAML替代TextBox的网格

时间:2013-06-05 18:20:42

标签: c# windows-runtime winrt-xaml

我在Border中有一个TextBox网格,内容绑定如此

<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>

对于小网格来说这很好,但是会有很多复制粘贴和替换大网格的值。有更好的方法吗?

2 个答案:

答案 0 :(得分: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本来就是用来的。

祝你好运!

答案 1 :(得分:2)

为什么不使用DataGrid for WinRT-很多数据网格可用于第三方的WinRT,比如Syncfusion提供的,你可以在这里查看。

http://darkcore.in/getting-started-in-syncfusions-datagrid-sfdatagrid-for-winrt/