【问题标题】:display a UserControl when click Button单击按钮时显示 UserControl
【发布时间】:2016-01-19 05:42:04
【问题描述】:

我创建了一个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>

我的问题是当我点击TrieButton时,这个ListViewUserControl没有显示,即使我增加了Grid的高度 所以请我如何更正我的代码,当我点击TrieButton时显示Listview

感谢帮助

【问题讨论】:

    标签: c# xaml win-universal-app windows-10-universal


    【解决方案1】:

    首先:您没有在任何地方将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;
    }
    

    【讨论】:

      【解决方案2】:

      为了响应按钮单击,您错误地创建了 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;
      }
      

      在这里我们检索现有的 Control 并更改其可见/折叠状态。

      【讨论】:

        猜你喜欢
        • 2016-02-10
        • 2021-04-07
        • 1970-01-01
        • 2013-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多