如何在WinUI 3中更改ProgressBarTrackHeight高度?

How to change the ProgressBarTrackHeight height in WinUI 3?

提问人:jasonzs 提问时间:10/24/2023 最后编辑:Andrew KeepCodingjasonzs 更新时间:10/24/2023 访问量:47

问:

我想在 WinUI-3 中更改进度条的 ProgressBarTrackHeight 的高度。我不知道该怎么做,请帮我一个代码示例。

<ProgressBar Width="130" Value="30" />

Progressbar

C# XAML 进度条 WinUI-3 Windows-App-SDK

评论


答:

0赞 Andrew KeepCoding 10/24/2023 #1

GitHub 存储库中存在有关此问题的问题。

作为解决方法,在问题得到解决之前,您可以创建一个自定义:ProgressBar

public class CustomProgressBar : ProgressBar
{
    private long _heightPropertyChangedCallBackToken;

    public CustomProgressBar() : base()
    {
        Loaded += OnLoaded;
        Unloaded += OnUnloaded;
    }

    private void OnLoaded(object sender, RoutedEventArgs e)
    {
        _heightPropertyChangedCallBackToken = RegisterPropertyChangedCallback(HeightProperty, OnHeightPropertyChanged);
        ApplyHeight();
    }

    private void OnUnloaded(object sender, RoutedEventArgs e)
    {
        UnregisterPropertyChangedCallback(HeightProperty, _heightPropertyChangedCallBackToken);
    }

    private void ApplyHeight()
    {
        foreach (FrameworkElement element in this.FindDescendants()
            .OfType<FrameworkElement>()
            .Where(x => x is Grid or Rectangle))
        {
            element.Height = Height;
        }
    }

    private void OnHeightPropertyChanged(DependencyObject sender, DependencyProperty dp)
    {
        ApplyHeight();
    }
}

现在该属性应该可以正常工作:Height

<local:CustomProgressBar
    Height="50"
    Width="130"
    Value="30" />

请注意,它来自 CommunityToolkit.WinUI.Extensions NuGet 包。FindDescendants

更新

在 GitHub 存储库中,对于不会动态更改的情况,建议了一个更好的选项。您只需要设置 :HeightProgressBarMinHeight

<Grid>
    <Grid.Resources>
        <x:Double x:Key="ProgressBarTrackHeight">50</x:Double>
    </Grid.Resources>
    <ProgressBar
        MinHeight="{StaticResource ProgressBarTrackHeight}"
        Maximum="100"
        Value="70" />
</Grid>

评论

0赞 Andrew KeepCoding 10/24/2023
在 repo 上发布了一个新问题
0赞 jasonzs 10/24/2023
非常感谢先生的帮助,设置最小高度效果很好。