hanali
hanali

Reputation: 227

display a UserControl when click Button

I have created a ListViewTemplate as a UserControl,that I want to display it when I click on this Hamburger Button,this is my code:

Main.xaml:

<SplitView.Content >
    <Grid  Background="White" >
        <Grid.RowDefinitions>
            <RowDefinition Height="35" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid Grid.Row="0" Background="#f0f0f0" >
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                <Button x:Name="TrieButton" Margin="0" Content="&#xE700;"
                    Width="50"  Background="Transparent" VerticalAlignment="Stretch" Click="TrieButton_Click" />
            </StackPanel>
        </Grid>
        <Frame Grid.Row="1"  x:Name="ContentFrame" Margin="0" />
    </Grid>
</SplitView.Content>

And this is the code Behind:

Main.xaml.cs:

 private void TrieButton_Click(object sender, RoutedEventArgs e)
 {
     ListViewTemplate c = new ListViewTemplate();
     if (c.Visibility == Visibility.Visible)
     {
         c.Visibility = Visibility.Collapsed;
     }

     else
     {  
         c.Visibility = Visibility.Visible;
     }
 }

this is my UserControl: ListViewTemplate.xaml:

<Grid x:Name="FilterGrid" Background="Black">
    <StackPanel   Orientation="Horizontal" HorizontalAlignment="Right" Margin="0" >
        <ListView x:Name="Liste" Background="Black" >
            <ListViewItem >
                <TextBlock Text="Nom" Foreground="#9d9e9e"/>
            </ListViewItem>
            <ListViewItem >
                <TextBlock Text="Catégorie" Foreground="#9d9e9e"/>
            </ListViewItem >  
        </ListView>
    </StackPanel>
</Grid>

My problem is that this ListView UserControl is not shown when I click on the TrieButton,even I have increased the height of Grid so please How can I correct my code,to have Listview showed when I click on TrieButton

thanks for help

Upvotes: 1

Views: 1156

Answers (2)

Salah Akbari
Salah Akbari

Reputation: 39966

Firstly: You didn't add the UserControl to your main XAML anywhere. You should add to XAML first like this:

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:usercontrol="clr-namespace:WpfApplication1"

Then:

<Grid  Background="White" x:Name="MGrid">
     <Grid.RowDefinitions>
         <RowDefinition Height="35" />
         <RowDefinition Height="10" />
         <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid Grid.Row="0" Background="#f0f0f0" >
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
            <Button x:Name="TrieButton" Margin="0" Content="&#xE700;"
                Width="50"  Background="Transparent" VerticalAlignment="Stretch" Click="TrieButton_Click" />
        </StackPanel>
    </Grid>
    <Frame Grid.Row="1"  x:Name="ContentFrame" Margin="0" />
    <usercontrol:ListViewTemplate x:Name="c" Grid.Row="2" Visibility="Collapsed"></usercontrol:ListViewTemplate>
</Grid>

Secondly: You just created a new instance of a ListViewTemplate. You should find one that is placed in your XAML by using FindName method and then change the Visibility of it like this:

private void TrieButton_Click(object sender, RoutedEventArgs e)
{
    ListViewTemplate c = MGrid.FindName("c") as ListViewTemplate;
    c.Visibility = c.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
}

Upvotes: 1

Jens Meinecke
Jens Meinecke

Reputation: 2940

In response to the button click you are incorrectly creating a new instance of a ListViewTemplate object and then throwing it away.

I think that what you really want to do is something along these lines:

private void TrieButton_Click(object sender, RoutedEventArgs e)
{
    ListViewTemplate c = (ListViewTemplate) Controls["Liste"];

    if (c.Visibility == Visibility.Visible)
       c.Visibility = Visibility.Collapsed;
    else
        c.Visibility = Visibility.Visible;
}

Here we retrieve the existing Control and change its visible/collapsed state.

Upvotes: 1

Related Questions