将标题列添加到Silverlight Grid

时间:2013-05-31 19:17:57

标签: c# silverlight

帮助!!!我有一个绑定到可观察集合的网格。当且仅当集合中有项目时,我需要将一行显示为第一个项目:

        <Grid x:Name="Broadcast" Opacity="0.85" MouseEnter="Broadcast_MouseEnter" Grid.Row="2" Margin="0,0,0,0" Width="Auto" HorizontalAlignment="Right" RenderTransformOrigin="0,0">
        <Grid.RenderTransform>
            <TransformGroup>
                <ScaleTransform/>
                <SkewTransform/>
                <RotateTransform/>
                <TranslateTransform X="0" Y="0"/>
            </TransformGroup>
        </Grid.RenderTransform>
        <Border
            x:Name="broadcastBorder" 
            Opacity="0"
            VerticalAlignment="Center" 
            HorizontalAlignment="Center" 
            BorderThickness="3" 
            BorderBrush="Black" 
            Background="White" 
            CornerRadius="5"
            RenderTransformOrigin="0.5,0.5">
            <Border.RenderTransform>
                <TransformGroup>
                    <ScaleTransform ScaleX="0" ScaleY="0"/>
                    <SkewTransform/>
                    <RotateTransform/>
                    <TranslateTransform/>
                </TransformGroup>
            </Border.RenderTransform>
            <ListBox Height="100" ItemsSource="{Binding}" x:Name="icAlerts" Grid.Row="1" >
                <!--<TextBlock Text="Clear All" />
                        <Button Tag="" Content="X" Click="DeleteBroadcast_Click" />-->
                <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel Background="Red" x:Name="spAlerts" Margin="10" Orientation="Vertical" />
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>
                <ListBox.Template>
                    <ControlTemplate TargetType="ListBox">
                        <Border>
                            <ScrollViewer>
                                <ItemsPresenter/>
                            </ScrollViewer>
                        </Border>
                    </ControlTemplate>
                </ListBox.Template>
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Grid>

                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="4*"></ColumnDefinition>
                                <ColumnDefinition Width="*"></ColumnDefinition>
                            </Grid.ColumnDefinitions>
                            <Rectangle Grid.ColumnSpan="2" Stroke="LightGray" StrokeThickness="2" 
                                       RadiusX="15" RadiusY="15" Margin="15"
                                       Height="Auto" Width="Auto">
                            </Rectangle>

                            <TextBlock Grid.Column="0" Text="{Binding}" />
                            <Button Grid.Column="1" Tag="{Binding}" Content="X" Click="DeleteBroadcast_Click"></Button>
                        </Grid>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </Border>
    </Grid>

BroadcastMessages = new ObservableCollection<string>();
BroadcastMessages.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(BroadcastMessages_CollectionChanged);
            icAlerts.ItemsSource = BroadcastMessages;

如何让第一行显示为&#34;标题&#34;行?

2 个答案:

答案 0 :(得分:0)

你确定你不想使用标题行吗?没有太多你无法做到的。 Bellow我在网格中添加了过滤功能,包括文本框,组合框和日期选择器。

如果您仍然希望它在数据行中,那么您可以恢复您的数据,如果有任何数据添加另一行,但“type”属性或某些内容不同。然后您的绑定转换器将根据此“类型”属性更改外观。您将绑定到已排序的集合,以便首先添加行。

DataGrid filtering

答案 1 :(得分:0)

所以我最后在委托调用之前修改了ObservableList。事实证明我们正在逃离Silverlight。 。 。