漫漫技术人生路

C#

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

<Window x:Class="WPFDemo.CommentList"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:c="clr-namespace:WPFDemo"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    Loaded="Window_Load"
    Title="RiskList" Height="512" Width="778">
    <Window.Resources>
        <DataTemplate x:Key="ItemDataTemplate" >
            <CheckBox
   x:Name="checkbox"            
   IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}, Path=IsSelected}" />
        </DataTemplate>
        <ObjectDataProvider x:Key="getData" ObjectType="{x:Type c:GetCommentData}" MethodName="GetData">
            <ObjectDataProvider.MethodParameters>
                <sys:Int32>0</sys:Int32>
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
       
        <Style x:Key="GridStyle" TargetType="{x:Type ListViewItem}">
            <Style.Resources>
                <c:AlternateListViewColor x:Key="myConverter"></c:AlternateListViewColor>
            </Style.Resources>        
            <Setter Property="Background">
                <Setter.Value>
                    <Binding RelativeSource="{RelativeSource Self}" Converter="{StaticResource myConverter}"></Binding>
                </Setter.Value>
            </Setter>       
            <Setter Property="BorderThickness" Value="1" />
            <Setter Property="BorderBrush" Value="Red"></Setter>
            <Setter Property="Padding" Value="0"></Setter>   
        </Style>

        <ControlTemplate x:Key="ItemTemplate" TargetType="ListViewItem">
            <Border
  BorderThickness="{TemplateBinding Border.BorderThickness}"
  Padding="{TemplateBinding Control.Padding}"
  BorderBrush="{TemplateBinding Border.BorderBrush}"
  Background="{TemplateBinding Panel.Background}"
  SnapsToDevicePixels="True">
                <ContentPresenter
   Content="{TemplateBinding ContentControl.Content}"
   ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}"
   HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}"
   VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}"
   SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
            </Border>
        </ControlTemplate>

        <Style TargetType="ListViewItem">
            <Setter Property="Template" Value="{StaticResource ItemTemplate}" />
        </Style>

    </Window.Resources>
    <StackPanel Orientation="Vertical" Margin="0" HorizontalAlignment="Center">
        <StackPanel Width="500" Orientation="Horizontal" Margin="0 0 0 0" >
            <Button Content="Add" HorizontalAlignment="Center" Click="Add_Click" Width="150" ></Button>
            <Button Content="Delete" HorizontalAlignment="Center"  Width="150" Click="Delete_Click" ></Button>
        </StackPanel>
       
        <Line Margin="40 0 0 0" Width="500" Stroke="Bisque" StrokeThickness="1" X2="200"></Line>
        <Grid Margin="80 0 0 0" Height="auto" >
            <Grid.RowDefinitions>
                <RowDefinition Height="5*"></RowDefinition>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="20*"></ColumnDefinition>
            </Grid.ColumnDefinitions>
        </Grid>
        <ListView Name="MyListView" Margin="0 0 0 0" Grid.Row="0"  Grid.Column="0" Width="500" DataContext="{StaticResource getData}" ItemsSource="{Binding}" ItemContainerStyle="{StaticResource GridStyle}"
                  CheckBox.Unchecked="OnUncheckItem"  CheckBox.Checked="OnCheckItem"
                  SelectionMode="Multiple" >
          
            <ListView.View>
                <GridView AllowsColumnReorder="True" x:Name="gridComment" ColumnHeaderToolTip="Comment Information">
                    <GridViewColumn x:Name="first">
                        <GridViewColumnHeader>
                            <CheckBox x:Name="ckbAll" Click="OnSelectAllChanged" ></CheckBox>
                        </GridViewColumnHeader>
                    </GridViewColumn>
                    <GridViewColumn x:Name="Second"  CellTemplate="{StaticResource ItemDataTemplate}" >
                        <GridViewColumnHeader>
                            <CheckBox x:Name="ckb" Click="OnSelectAllChanged" ></CheckBox>
                        </GridViewColumnHeader>
                    </GridViewColumn>
                   
                    <GridViewColumn Header="Comment">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding Comment}" ToolTip="{Binding CommentToolTip}" TextAlignment="Right">
                                    <TextBlock.ContextMenu>
                                        <ContextMenu>
                                            <MenuItem Header="View Comment" Click="View_Click"></MenuItem>
                                            <MenuItem Header="Add Comment" Click="AddComment_Click"></MenuItem>
                                        </ContextMenu>
                                    </TextBlock.ContextMenu>
                                </TextBlock>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=CrateDate}" Header="CreateDate" Width="100"></GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>
    </StackPanel>
</Window>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Data;
using System.Windows.Controls;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using System.Windows.Media;
namespace WPFDemo
{
    /// <summary>
    /// Interaction logic for CommentList.xaml
    /// </summary>
    public partial class CommentList : Window
    {
        public CommentList()
        {
            InitializeComponent();
        }

        protected void Add_Click(object sender, RoutedEventArgs e)
        {

        }

        protected void View_Click(object sender, RoutedEventArgs e)
        {

        }

        protected void AddComment_Click(object sender, RoutedEventArgs e)
        {

        }

        protected void Window_Load(object sender, RoutedEventArgs e)
        {
            ObjectDataProvider provider = (ObjectDataProvider)(this.FindResource("getData"));
            provider.MethodParameters[0] = 8;

            DataTemplate dt = new DataTemplate();
            FrameworkElementFactory fef = new FrameworkElementFactory(typeof(CheckBox));
            fef.AddHandler(CheckBox.CheckedEvent, System.Delegate.CreateDelegate(typeof(RoutedEventHandler), this, "checkBox1_Checked"));
            fef.AddHandler(CheckBox.UncheckedEvent, System.Delegate.CreateDelegate(typeof(RoutedEventHandler), this, "checkBox1_UnChecked"));
            fef.SetValue(CheckBox.ForegroundProperty, Brushes.White);
            Binding binding = new Binding();
            binding.Path = new PropertyPath("CommentId");


            Binding myBinding = new Binding();
            myBinding.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(ListViewItem),2);


            fef.SetValue(CheckBox.HorizontalAlignmentProperty, HorizontalAlignment.Center);
            fef.SetBinding(CheckBox.NameProperty, binding);
            //fef.SetBinding(CheckBox.IsCheckedProperty, myBinding);
            dt.VisualTree = fef;
            first.CellTemplate = dt;
        }


        private ArrayList alList = new ArrayList();
        private void checkBox1_UnChecked(object sender, RoutedEventArgs e)
        {
            CheckBox ck = sender as CheckBox;

            ListViewItem item = FindAncestor<ListViewItem>(sender as DependencyObject);
            CommentClass c = item.Content as CommentClass;

            alList.Remove(c.CommentId);

 

        }


        private void checkBox1_Checked(object sender, RoutedEventArgs e)
        {
            CheckBox ck = sender as CheckBox;
       
            ListViewItem item = FindAncestor<ListViewItem>(sender as DependencyObject);
            CommentClass c = item.Content as CommentClass;
            if (ck.IsChecked.HasValue && ck.IsChecked.Value)
            {
                alList.Add(c.CommentId);
            }
            else
            {
                alList.Remove(c.CommentId);
            }
        }

        private T FindAncestor<T>(DependencyObject obj) where T : FrameworkElement
        {
            T t = default(T);

            while ((obj = VisualTreeHelper.GetParent(obj)) != null)
            {

                if (obj is ListViewItem)
                {
                    break;
                }
            }

            if (obj != null)
            {
                t = (T)obj;
            }

            return t;
        }

        private void Delete_Click(object sendet, RoutedEventArgs e)
        {

            foreach (object obj in alList)
            {
                MessageBox.Show(Convert.ToString(obj));
            }
        }

        private void MyListView_Selected(object sender, RoutedEventArgs e)
        {

        }

        private void OnSelectAllChanged(object sender, RoutedEventArgs e)
        {
            if (ckb.IsChecked.HasValue && ckb.IsChecked.Value)
            {
                MyListView.SelectAll();
                //ListView ls = sender as ListView;
            
                //int intCnt = ls.SelectedItems.Count;

                foreach (CommentClass lv in MyListView.SelectedItems)
                {
                    alList.Add(lv.CommentId);
                }
            }
            else
            {
                MyListView.UnselectAll();
            }
        }

        private void OnUncheckItem(object sender, RoutedEventArgs e)
        {
            ckb.IsChecked = false;

            CheckBox d = e.OriginalSource as CheckBox;

            ListViewItem item = FindAncestor<ListViewItem>(e.OriginalSource as DependencyObject);
            if (item != null)
            {
                CommentClass c = item.Content as CommentClass;
                alList.Remove(c.CommentId);
            }
        }

        //OnCheckItem
        private void OnCheckItem(object sender, RoutedEventArgs e)
        {
            CheckBox d = e.OriginalSource as CheckBox;
            ListViewItem item = FindAncestor<ListViewItem>(e.OriginalSource as DependencyObject);
            if (item != null)
            {
                CommentClass c = item.Content as CommentClass;
            }
        }
    }

 

}

posted on 2009-08-04 18:32  javaca88  阅读(787)  评论(0编辑  收藏  举报