Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

WPF Tips and Facts

0.00/5 (No votes)
31 Oct 2011 1  
Some useful WPF tips.
  • 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. I like the other approach listed in the article where one can attach a handler like:
  • C#
    MyListView.AddHandler(Thumb.DragDeltaEvent, 
        new DragDeltaEventHandler(this.OnHeaderResize), true);

    And handle it:

    C#
    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:
  • XML
    <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>
                   </bsp;           </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>
    <gridview allowscolumnreorder="False">
    <gridviewcolumn width="25">
    <gridviewcolumn.headertemplate>
    <listview name="MyListView" height="200">
    <listview.view><gridview>
    <gridviewcolumn><gridviewcolumn.headertemplate>

    You can then handle global check / uncheck like:

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

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here