- Do you know that there is no way (at least from my research and experiments) to hide the control box of a dialog. I tried several ways including using Native GetWindowLong and SetWindowLong to set the border style as fixed dialog but in vein.
- One of the hardest things in WPF is to prevent re-size of a column in ListView. One way is to completely templatize ColumnHeader and comment out the thumb gripper. This approach is listed here: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/fa97b3a3-c5ca-4643-8e95-c2c23032de2c. I like the other approach listed in the article where one can attach a handler like:
MyListView.AddHandler(Thumb.DragDeltaEvent,
new DragDeltaEventHandler(this.OnHeaderResize),
true);
And handle it:
private void OnHeaderResize(object sender, DragDeltaEventArgs e)
{
Thumb SenderAsThumb = e.OriginalSource as Thumb;
GridViewColumnHeader header = SenderAsThumb.TemplatedParent as GridViewColumnHeader;
if (header == null)
{
return;
}
GridView view = (MyListView.View as GridView);
// If user tries to resize checkbox column, reset the width to fixed
if (view.Columns[0] == header.Column)
{
header.Column.Width = FixedWidth;
e.Handled = true;
}
} - ListView and CheckBox - Following is a method to add a checkbox both to the header and to the column rows in the ListView:
<ListView Height="200" x:Name="MyListView">
<ListView.View>
<GridView>
<GridViewColumn>
<GridViewColumn.HeaderTemplate>
<DataTemplate>
<CheckBox Checked="AllSelectionChanged" Unchecked="AllSelectionChanged"/>
</DataTemplate>
</GridViewColumn.HeaderTemplate>
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Selected}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Header="Version" DisplayMemberBinding="{Binding Version}"/>
<GridViewColumn Header="Path" DisplayMemberBinding="{Binding Path}"/>
</GridView>
</ListView.View>
</ListView>
You can then handle global check / uncheck like:
private void AllSelectionChanged(object sender, RoutedEventArgs e)
{
CheckBox chkBox = sender as CheckBox;
if (chkBox != null)
{
bool check = chkBox.IsChecked.Value;
foreach ([YourBoundType] selection in MyListView.Items)
{
selection.Selected = check;
}
}
}
Sunday, May 31, 2009
WPF Tips And Facts
Labels:
checkbox,
column header,
fixed width listview,
listview,
WPF
Subscribe to:
Posts (Atom)