user3621917
user3621917

Reputation: 95

Wpf changing Visibility from code behind

I am trying to change the visiblity of my datagrid from code behind but it's not working

 private void afch_data_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        if (donne_compte.IsVisible) // this is a grid and It's visible
        {
           dgComptes.Visibility = Visibility.Visible; 
           //when I breakpoint here , I find that the datagrid visibilty   `property is still set to hidden  

        }
    }

EDIT here s my datagrid Xaml It's a simple one :

<DataGrid x:Name="dgComptes" CanUserAddRows="False"   IsSynchronizedWithCurrentItem="True"  ItemsSource="{Binding ComCollection}"  RowHeaderWidth="0"  HorizontalScrollBarVisibility="Disabled"  HorizontalAlignment="Left" Margin="529.534,84.016,-390.033,0" VerticalAlignment="Top" Height="Auto"  MaxHeight="200"  Width="395.429" RenderTransformOrigin="0.5,0.5" Background="#FFCFCFCF"  ColumnWidth="*" HorizontalGridLinesBrush="Black" VerticalGridLinesBrush="Black" RowBackground="#FFCFCFCF" AreRowDetailsFrozen="True" Style="{DynamicResource DataGridStyle2}" CellEditEnding="dataGrid1_CellEditEnding" CurrentCellChanged="dataGrid1_CurrentCellChanged" SelectionChanged="dataGrid1_SelectionChanged" AutoGeneratingColumn="dataGrid1_AutoGeneratingColumn" AutoGenerateColumns="False" >

                <DataGrid.Columns >

                    <DataGridTemplateColumn x:Name="champ_supp2" >
                        <DataGridTemplateColumn.CellTemplate >
                            <DataTemplate>
                                <Button x:Name="supprime" Content="Button" Width="30" Height="30" Style="{DynamicResource ButtonStyle12}" Click="supprime_Click"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>


                    <DataGridTextColumn   Header="Id"  Binding="{Binding ID}" />
                    <DataGridTextColumn   Header="Taille"  Binding="{Binding TAILLE}"  />
                    <DataGridTextColumn   Header="Client" Binding="{Binding CLIENT}"   />
                    <DataGridTextColumn   Header="D.arrivée" Binding="{Binding D_ARRIVEE}"   />
                    <DataGridTextColumn   Header="D.départ" Binding="{Binding D_DEPART}"   />

                </DataGrid.Columns>



            </DataGrid>

Upvotes: 7

Views: 42807

Answers (1)

Anatolii Gabuza
Anatolii Gabuza

Reputation: 6260

Disclaimer


Setting Visibility works fine for DataGrid. Just checked and this should perfectly work:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="25"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <Button Grid.Row="0" Content="Show DataGrid" Click="Button_Click"/>
    <DataGrid Visibility="Hidden"
        Grid.Row="1"
        x:Name="gridToHide">
    </DataGrid>

</Grid>

with code behind:

private void Button_Click(object sender, RoutedEventArgs e)
{
    this.gridToHide.Visibility = Visibility.Visible;
}


Solution


The thing which might disallow/block from setting Visibility property of a UIElement is Visibility of the parent element. If parent element is hidden you can't make its ancestors visible. The value of Visibility will be changed but IsVisible will remain false.
To fix the problem you have to check logical tree of elements (parents) and search for the hidden element.

Upvotes: 12

Related Questions