【问题标题】:Multi level grid in Expression BlendExpression Blend 中的多级网格
【发布时间】:2010-10-14 20:33:33
【问题描述】:

在过去的几天里,我一直在使用 Expressions Blend 4,并且开始掌握它。我最近才开始使用数据绑定,发现它非常简单且功能强大。出于原型设计的目的,没有比这更好的应用程序了。

我目前正在制作具有潜在多级网格的 Silverlight 屏幕原型。有没有办法用 Blend 做到这一点?我尝试创建一个多级数据示例(我将集合数据添加到集合数据中)并将其拖到数据网格中。只出现了第一层。

任何帮助将不胜感激。

【问题讨论】:

    标签: silverlight-4.0 expression-blend


    【解决方案1】:

    您可以使用带有网格的 ItemsControl 作为其面板,然后在 ItemTemplate 中使用另一个 ItemsControl 并使用另一个网格将其绑定到第二级数据。使用 ItemsControl,您可以对事物的显示方式进行大量控制,而不仅仅是使用网格。

    如果您需要如下所示的内容:

    您可以这样做:

    1. 向您的 Blend 项目添加多级示例数据源

    2. 将 ItemsControl 添加到您的布局根元素

    3. 将 ItemsControl.ItemsSource 属性绑定到父级

    4. 使用此选项创建一个空项目模板:

    5. 在项目模板中,创建您希望第二级具有的结构。在我的示例中,结构如下所示:

    6. 将每个子元素绑定到父集合的项目中的属性,例如网格的标题。

    7. 将项目内的 DataGrid 绑定到子集合。

    最终结果将是一个项目列表,每个项目将包含一个 StackPanel、一个内部带有 TextBlock 的边框和一个绑定到子数据的 DataGrid。

    此示例的 XAML 如下所示:

        <UserControl
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:SampleData="clr-namespace:Expression.Blend.SampleData.SampleDataSource" xmlns:System="clr-namespace:System;assembly=mscorlib" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" mc:Ignorable="d"
            x:Class="ASD_Answer005.MainPage" d:DesignWidth="703" d:DesignHeight="435">
    
            <UserControl.Resources>
                <SampleData:SampleDataSource x:Key="SampleDataSource" d:IsDataSource="True"/>
                <DataTemplate x:Key="ChildDataTemplate">
                    <StackPanel Orientation="Vertical">
                        <Border BorderThickness="0,0,0,2" BorderBrush="Black" Padding="5">
                            <TextBlock TextWrapping="Wrap" Text="{Binding CategoryName}" FontSize="26.667" Height="39"/>
                        </Border>
                        <sdk:DataGrid ItemsSource="{Binding ChildCollection}" BorderThickness="0"/>
                    </StackPanel>
                </DataTemplate>
            </UserControl.Resources>
            <d:DataContext>
                <Binding Source="{StaticResource SampleDataSource}"/>
            </d:DataContext>
            <UserControl.DataContext>
                <Binding Source="{StaticResource SampleDataSource}"/>
            </UserControl.DataContext>
    
            <Grid x:Name="LayoutRoot" Background="White">
                <ScrollViewer HorizontalAlignment="Left" VerticalAlignment="Top" BorderThickness="0" Padding="0">
                    <StackPanel Orientation="Vertical" Width="703">
                        <ItemsControl ItemsSource="{Binding ParentCollection}" ItemTemplate="{StaticResource ChildDataTemplate}"/>
                    </StackPanel>
                </ScrollViewer>
            </Grid>
        </UserControl>
    

    我希望这会有所帮助。

    【讨论】:

    • 你怎么能做到这一点?这可以通过 Expression Blend UI 还是通过 XAML 来完成?
    • 我已经编辑了我的答案以添加一些关于如何实现这一点的细节。我希望这就是你要找的。​​span>
    • 所以如果父级有更多字段,我将不得不添加更多控件,并将数据绑定到每个?数据的顺序是否相同?
    • 是的,父控件可以拥有任意数量的属性,您也可以将它们绑定到新控件。当您提到数据的顺序时,我不完全理解您的意思。在您的视图模型中,您可以决定项目的顺序,而在视图中,元素的顺序取决于您选择的布局。
    猜你喜欢
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    相关资源
    最近更新 更多