Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
IsFrozen Property

DataGridColumn.IsFrozen Property

Gets a value that indicates whether the column is prevented from scrolling horizontally.

Namespace:  System.Windows.Controls
Assembly:  PresentationFramework (in PresentationFramework.dll)

public bool IsFrozen { get; internal set; }

Property Value

Type: System.Boolean
true if the column cannot be scrolled horizontally; otherwise, false. The registered default is false. For information about what can influence the value, see DependencyProperty.

IsFrozen cannot be used to freeze a column. Instead, set the FrozenColumnCount property. The leftmost columns up to the column that is specified by the FrozenColumnCount number will freeze in place.

The following example shows how to freeze a column when "Freeze Column" is selected from the ContextMenu. Columns are moved to the left in order to be included in the frozen columns.

<!--Defines the handlers for when the FreezeColumnCommand is executed-->
<Window.CommandBindings>
    <CommandBinding Command="{x:Static local:Window1.FreezeColumnCommand}" Executed="CommandBinding_Executed" />
</Window.CommandBindings>
<!--Defines the context menu for the ColumnHeaders and attaches the FreezeColumnCommand-->
<Window.Resources>
    <ContextMenu x:Key="ColumnHeaderMenu" IsEnabled="True"  >
        <MenuItem Header="Freeze Column" IsEnabled="True" Command="{x:Static local:Window1.FreezeColumnCommand}"
                  CommandTarget="{Binding RelativeSource={RelativeSource AncestorType=Popup}, Path=PlacementTarget}" 
                  CommandParameter="{Binding ElementName=DG1, Path=CurrentColumn.DisplayIndex}" />
    </ContextMenu>
</Window.Resources>

<Grid>
    <!--Creates a new DataGrid with a context menu for the column headers-->
    <DataGrid Name="DG1" ItemsSource="{Binding}"  >
        <DataGrid.ColumnHeaderStyle >
            <Style TargetType="DataGridColumnHeader">
                <Setter Property="ContextMenu" Value="{StaticResource ColumnHeaderMenu}" />
            </Style>
        </DataGrid.ColumnHeaderStyle>
    </DataGrid>
</Grid>
public partial class Window1 : Window
{

    public static RoutedUICommand FreezeColumnCommand = new RoutedUICommand();



    public Window1()
    {
        InitializeComponent();
        //GetData connects to the database and returns the data in a table.
        AdventureWorksLT2008DataSet.SalesOrderDetailDataTable dt = GetData();

        DG1.DataContext = dt;
    }


...


    private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
    {
       //Get the column header that started the command and move that column left to freeze it.
       System.Windows.Controls.Primitives.DataGridColumnHeader header = (System.Windows.Controls.Primitives.DataGridColumnHeader)e.OriginalSource;
       if (header.Column.IsFrozen ==true)
       {
           return;
       }
       else
       {
           header.Column.DisplayIndex = DG1.FrozenColumnCount;
           DG1.FrozenColumnCount++;
       }


    }

}

.NET Framework

Supported in: 4.6, 4.5, 4

.NET Framework Client Profile

Supported in: 4
Show:
© 2015 Microsoft