拆分视图控件,在窗格打开时使内容变暗

时间:2016-11-20 09:43:02

标签: uwp uwp-xaml

在应用程序上,我有一个带有窗格和内容的Split View控件。我想知道当窗格打开时是否可以使内容变暗,就像我在splitview.Content上应用75%不透明蒙版一样。

提前感谢您的帮助

此致

1 个答案:

答案 0 :(得分:1)

有多种选择:

  • 申请"假"通过将半透明黑暗控件(例如Grid)作为SplitView.Content的顶层来实现不透明度。

  • Grid中使用黑色SplitView.Content作为控制树的根对象,在其中放置一个灯Grid(白色或应用的颜色)然后构建其余的内容。

内容Xaml:

<SplitView.Content>
    <Grid Background="Black">
        <Grid
            x:Name="OpacityGrid"
            Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
            Opacity="1">
        ...
        </Grid>
    </Grid>
</SplitView.Content>
  • 将页面的根目录设置为黑色,并使用灯光控件作为SplitView.Content的根目录。这与之前的方法类似,但需要少一层控件。

设置结构后,您可以根据SplitView.Pane的状态将不透明度应用于灯光控制(或案例1的深色顶层)。要么在后面的代码中执行:

private void HamburgerButton_Click(object sender, RoutedEventArgs e)
{
    MySplitView.IsPaneOpen = !MySplitView.IsPaneOpen;
    OpacityGrid.Opacity = MySplitView.IsPaneOpen ? 0.7 : 1;
}

或者使用转换器:

public class BoolToOpacityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value is bool && (bool) value)
            return 0.7;
        return 1;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

XAML:

<Grid
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
    Opacity="{Binding IsPaneOpen, ElementName=MySplitView, Converter={StaticResource BoolToOpacityConverter}}" />

额外注意:如果您想使用PaneOpened活动而不是点击汉堡包图标,那么您就可以使用this trick,因为没有PaneOpened活动