单击 Button 时显示 UserControl

display a UserControl when click Button

我创建了一个 ListViewTemplate 作为 UserControl,当我点击这个汉堡时我想显示它 Button,这是我的代码:

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>

这是后面的代码:

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

这是我的UserControlListViewTemplate.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>

我的问题是 ListView UserControl 当我点击 TrieButton 时没有显示,即使我增加了 Grid 的高度 所以请如何更正我的代码,以便在我单击 TrieButton

时显示 Listview

感谢帮助

为了响应按钮单击,您错误地创建了 ListViewTemplate 对象的新实例,然后将其丢弃。

我认为你真正想做的是这些方面的事情:

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

这里我们检索现有控件并更改其 visible/collapsed 状态。

首先: 您没有将 UserControl 添加到主 XAML 的任何地方。你应该首先像这样添加到 XAML:

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

然后:

<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>

其次: 您刚刚创建了一个 ListViewTemplate 的新实例。您应该使用 FindName 方法找到放置在 XAML 中的一个,然后像这样更改它的 Visibility

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