【问题标题】:How to get Canvas to scroll in WinUI 3?如何让 Canvas 在 WinUI 3 中滚动?
【发布时间】:2021-10-25 14:35:44
【问题描述】:

当 Canvas 的子项不在视线范围内时,我无法让 ScrollBars 出现在 Canvas 上。这是直接添加到 MainWindow 中的。

<ScrollViewer>
    <Canvas x:Name="MainCanvas"/>
</ScrollViewer>

private void MainWindow_Activated(object sender, WindowActivatedEventArgs args)
    {
        for (int i = 0; i < 20; i++)
        {
            var rect = new Rectangle()
            {
                Height = 100,
                Width = 200,
                Stroke = new SolidColorBrush(Colors.Magenta)
            };

            Canvas.SetLeft(rect, (i * 200) + 10);
            Canvas.SetTop(rect, 10);

            var rect1 = new Rectangle()
            {
                Height = 100,
                Width = 200,
                Stroke = new SolidColorBrush(Colors.DarkOrchid)
            };

            Canvas.SetLeft(rect1, 10);
            Canvas.SetTop(rect1, (i * 100) + 10);

            MainCanvas.Children.Add(rect);
            MainCanvas.Children.Add(rect1);
        }
    }

因此,添加了水平和垂直不可见的儿童。我已经尝试了滚动条可见性、对齐方式等的各种设置,但只是无法让滚动条出现。感谢您的任何意见。

【问题讨论】:

    标签: c# .net uwp winui winui-3


    【解决方案1】:

    Canvas 指定一个大小,以便ScrollViewer 可以测量它:

    private void MainWindow_Activated(object sender, WindowActivatedEventArgs args)
    {
        MainCanvas.Width = 0;
        MainCanvas.Height = 0;
    
        for (int i = 0; i < 20; i++)
        {
            var rect = new Rectangle()
            {
                Height = 100,
                Width = 200,
                Stroke = new SolidColorBrush(Colors.Magenta)
            };
    
            double left = (i * 200) + 10;
            MainCanvas.Width = left;
            Canvas.SetLeft(rect, left);
            Canvas.SetTop(rect, 10);
    
            var rect1 = new Rectangle()
            {
                Height = 100,
                Width = 200,
                Stroke = new SolidColorBrush(Colors.DarkOrchid)
            };
    
            double top = (i * 100) + 10;
            MainCanvas.Height = top;
            Canvas.SetLeft(rect1, 10);
            Canvas.SetTop(rect1, top);
    
            MainCanvas.Children.Add(rect);
            MainCanvas.Children.Add(rect1);
        }
    }
    

    您可能还想启用水平滚动:

    <ScrollViewer HorizontalScrollBarVisibility="Auto">
    ...
    

    【讨论】:

    • 谢谢,我太傻了,信息太多忘记了基础知识!
    猜你喜欢
    • 2021-10-23
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2023-01-21
    相关资源
    最近更新 更多