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