折叠类中的所有按钮

时间:2015-12-16 09:12:59

标签: c# .net wpf

我是C#的新手,需要一些帮助。我试过谷歌搜索,但没有用,所以我在这里问。我有带命令按钮的WPF表单。我用:

cmd_Button.Visibility = Visibility.Collapsed;
cmd_Button.Visibility = visibility.Visible;

根据需要隐藏和显示按钮。问题是我有很多按钮,我必须在表单的初始化时折叠所有按钮(除了三个),除了我要在所有Click事件上显示的那些之外我必须折叠所有按钮。

我的问题是;有没有办法折叠类中的所有按钮,在所述类的开头,然后显示我想用visibility.visible显示的那些?

以下是我正在使用的代码示例:

XAML

<Button x:Name="cmd_Button1" Content="Button1" HorizontalAlignment="Left" Margin="15,96,0,0" VerticalAlignment="Top" Width="75" Click="cmd_Button1_Click"/>

然后是c#

public MainWindow()
    {
        InitializeComponent();

        //collapse buttons

        cmd_Button1.Visibility = Visibility.Collapsed;
        cmd_Button2.Visibility = Visibility.Collapsed;
        cmd_Button3.Visibility = Visibility.Collapsed;
}

private void cmd_ShowButton2_Click(object sender, RoutedEventArgs e)
{
    cmd_Button1.Visibility = Visibility.Collapsed;
    cmd_Button3.Visibility = Visibility.Collapsed;

    cmd_Button2.Visibility = Visibility.Visible;
}

3 个答案:

答案 0 :(得分:1)

您可以在页面资源中创建一个样式,默认按钮可见性已折叠:

 <UserControl.Resources>
     <Style TargetType="Button">
         <Setter Property="Visibility" Value="Collapsed" />                  
     </Style>
 </UserControl.Resources>

我会敦促你阅读有关MVVM的内容。 WPF使用MVVM绑定更简洁,更简单,而不是在后面的代码中操作ui元素。

答案 1 :(得分:0)

你可以设置一个带触发器的样式来设置一组按钮(或一般的UIElements)的行为:

按钮样式(在Usercontrols.Resources上):

<Style x:Key="CollapsableButtons" TargetType="Button">
    <Style.Triggers>
        <DataTrigger Binding="{Binding CollapseButtonsBoolean}" Value="true">
            <Setter Property="Visibility" Value="Collapsed" />
        </DataTrigger>
    </Style.Triggers>
</Style>

按钮上的用法:

<Button Style="{StaticResource CollapsableButtons}"/>

而且,正如GazTheDestroyer所说,使用MVVM,在你的datacontext中定义一个名为CollapseButtonsBoolean的布尔值。您的按钮可见性将在布尔值的同时发生变化。

答案 2 :(得分:0)

你可以使用

public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
        {
            if (depObj != null)
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
                    if (child != null && child is T)
                    {
                        yield return (T)child;
                    }

                    foreach (T childOfChild in FindVisualChildren<T>(child))
                    {
                        yield return childOfChild;
                    }
                }
            }
        }

并致电

 foreach (Button tb in FindVisualChildren<Button>(testWindow))
            {
               tb.Visibility = Visibility.Collapsed;
            }

xaml是

<Window x:Class="WpfApplication1.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:cef="clr-namespace:WpfApplication1"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
    Title="Window1" x:Name="testWindow" Height="300" Loaded="Window_Loaded" Width="300" WindowStyle="None">
    <Grid Background="White">
        <Button x:Name="but1" Content="but1"></Button>
        <Button x:Name="but2" Content="but2"></Button>
        <Button x:Name="but3" Content="but3"></Button>


    </Grid>
</Window>