WinUI3-自定义应用背景

原文链接

https://white-night.club/index.php/2023/05/22/appdev5/

2023年5月22日

将应用背景设置为自定义的图片

前言

图片和应用界面色调的选择

这一块仁者见仁,智者见智。但最好从用户交互的角度去仔细思考颜色的搭配。设想一下,你的用户打开你的应用,发现蓝色背景红色字,标题栏还是绿色。我要是用户我就得高血压。

如果你选择深色的背景,那么应用主题、导航栏颜色、标题栏颜色最好选择偏白色的,反之亦然。我个人的其中一个颜色搭配如下:

  • 二次元背景,大部分背景色为黑色。
  • 应用标题栏选择#ffffffff。
  • 导航栏背景色选择#ceffffff。
  • 页面框架颜色选择#00000000。
  • 应用的主题设置为light。

实现效果如图,主要是这么搭配,你自定义的标题栏几乎能和导航栏融为一体。我个人觉得还是能凑合看的。

还有就是图片要素不要选太杂的。特别是当你想把页面框架的背景设置图中这种半透明的效果时。我自己试过了,图片选那种要素太多的会导致用户看不清你的界面。

全局背景设置

MainWindow.xaml

显然,你想让用户从打开应用到关闭应用,都能加载出自定义的背景。那么肯定是在你的窗口文件MainWindow.xaml中操作。

我直接把代码放上来。这段代码中包括:

  • 自定义的图片,及其存放的相对路径
  • 导航栏
  • 页面框架

别忘了修改图片存放的路径,已经在代码中高亮标记了。

//MainWindow.xaml
<Grid>
        <Grid.Background>
            <ImageBrush x:Name="ApplicationBackgroundImage" ImageSource="Assets/Background/Default.jpg" Stretch="UniformToFill"/>
        </Grid.Background>
        <Grid Background="#ffffffff" x:Name="AppTitleBar" Grid.Column="0" VerticalAlignment="Top">
            <TextBlock x:Name="AppTitleTextBlock"
               TextWrapping="NoWrap" Text="LoginMenuTemplate"
               FontStretch="Expanded"
               VerticalAlignment="Center"
               Margin="10,10,1,2"/>
        </Grid>
        
        <Grid Margin="0,29.5,0,0">
            <NavigationView  x:Name="navigationView" Background="#ceffffff" SelectionChanged="LoadPages" IsBackButtonVisible="Collapsed" IsSettingsVisible="False"  >
                <NavigationView.MenuItems>
                    <NavigationViewItem Icon="Home" Content="主页" Tag="Home"/>      
                </NavigationView.MenuItems>

                <NavigationView.FooterMenuItems>
                    <NavigationViewItem Icon="Setting" Content="设置" Tag="Settings" />
                </NavigationView.FooterMenuItems>

                <Frame Background="#00000000" x:Name="pagesFrame">
                </Frame>

            </NavigationView>
        </Grid>
        
    </Grid>

实现的效果可以自己试下,也可以自行尝试各部件之间的颜色搭配。

自定义背景

更改ImageSource

刚刚你已经设置了应用的背景,接下来就是实现让用户能自定义背景的操作了。

个人建议,把自定义背景的操作放在你应用的设置界面Settings.xaml里。

这里直接放代码。原理就是通过文件选择器选择某张图片,通过流转换成位图,最后再把MainWindow.xaml中背景图片的源设置为该位图。具体是通过buttom,还是checkbox啥的去触发,各位就看自己喜好了。

  private async void changeAppBackground(object sender, RoutedEventArgs e)
        {
            var filePicker = new FileOpenPicker();
            var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(MainWindow.current);
            WinRT.Interop.InitializeWithWindow.Initialize(filePicker, hwnd);
            filePicker.FileTypeFilter.Add("*");
            var file = await filePicker.PickSingleFileAsync();
            if (file != null)
            {
                BitmapImage bitmapImage = new BitmapImage();
                FileRandomAccessStream stream = (FileRandomAccessStream)await file.OpenAsync(FileAccessMode.Read);
                bitmapImage.SetSource(stream);
                MainWindow.backgroundImage.ImageSource = bitmapImage;
            }
        }

别忘了在MainWindow中添加backgroundImage的定义以及对应的初始化。代码如下

   public MainWindow()
        {
            this.InitializeComponent();
            current = this;
            backgroundImage = ApplicationBackgroundImage;
            
        }
  public static Microsoft.UI.Xaml.Media.ImageBrush backgroundImage;

当然有个问题,每次用户重新打开应用,背景图片都会被更改回默认设置的图片。那么如何解决这个问题捏?等我碰到这个问题的时候再说😋。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值