[积跬成千]wpf基础之Visibility与Opacity的区别

    我们都知道在WPF中将UI元素的Visibility设为Visibility.Hidden或者Opacity值设为0时,元素都将被隐藏,那么他们作用有什么区别吗?直接上demo。


我们用两组grid+button,分别设置其Visibility和Opacity属性来测试效果,代码很简单,想知道结果的可以直接跳到最后看结论。

xaml代码:

<Window x:Class="VisibilityAndOpacity.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid Margin="10">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="40"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <Grid x:Name="gdVis" Grid.Column="0" Grid.Row="0" Background="Green">
            <Button x:Name="btnVis" Content="Visibility" Visibility="Visible" Background="Green" VerticalAlignment="Center" HorizontalAlignment="Center"
                    Click="btnVisTest"/>
        </Grid>
        <Grid x:Name="gdOpac" Grid.Column="1" Grid.Row="0" Background="Yellow">
            <Button x:Name="btnOpac" Content="Opacity" Visibility="Visible" Background="Yellow" VerticalAlignment="Center" HorizontalAlignment="Center"
                    Click="btnOpacTest"/>
        </Grid>

        <Button Content="开始测试" Grid.Row="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center"
                Click="btnTest"/>
    </Grid>
</Window>

后置代码:

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void btnVisTest(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("你点击了Visibility测试按钮。");
        }

        private void btnOpacTest(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("你点击了Opacity测试按钮。");
        }

        private void btnTest(object sender, RoutedEventArgs e)
        {
            //隐藏父容器
            gdVis.Visibility = Visibility.Hidden;
            gdOpac.Opacity = 0;

            //并尝试子元素反隐藏
            btnVis.Visibility = Visibility.Visible;
            btnOpac.Opacity = 1;
        }
    }

测试结果:


我们点击空白处的原按钮区域,发现:



综上:

相同点:

1.设置UIElement元素Visibility属性为Hidden和设置其Opacity为0,都能达到隐藏元素效果。

2..两种方法隐藏元素后将同样对其子元素生效,且无法通过子元素设置Visibility为visible或Opacity为1来达到反隐藏的效果。

不同点:

3.设置为Visibility为Hidden的元素被隐藏且无法接收输入事件,而通过设置Opacity为0隐藏的元素仍可以正常接收输入事件。

题外:

4.两种方法都只是隐藏本元素及其子元素,但不影响其他元素布局,而将Visibility设置为collapsed将隐藏本元素并会对整体元素进行重新布局。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值