WPF ProgressBar 绑定

15 篇文章 0 订阅

界面

<Window x:Class="ProgressBarBindingTest.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>
        <!--<ProgressBar Name="progressBar" Grid.Row="1" Margin="0,10,5,0" MaxWidth="320"  Maximum="100" Height="50" Value="{Binding BatterySOH}">
        </ProgressBar>-->

        <ProgressBar Name="progressBar" Grid.Row="1" Margin="0,10,5,0" MaxWidth="320"  Maximum="100" Height="50" >
            <ProgressBar.Value>
                <Binding Path="BarBindingVal" Mode="TwoWay" ></Binding>
            </ProgressBar.Value>
        </ProgressBar>
        
        <TextBox HorizontalAlignment="Left" Height="30" Margin="107,238,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" Width="127" Name="tbBarVal"/>
        <Button Content="更 新" HorizontalAlignment="Left" Height="30" Margin="315,238,0,0" VerticalAlignment="Top" Width="95" Name="btnUpdateBar" Click="btnUpdateBar_Click"/>
    </Grid>
</Window>

cs 文件

using System.ComponentModel;
using System.Windows;

namespace ProgressBarBindingTest
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        ProgressBarBinding pbb = new ProgressBarBinding();
        bool isIncrease = true;

        public MainWindow()
        {
            InitializeComponent();

            progressBar.DataContext = pbb;

            tbBarVal.Text = "20";
        }

        private void btnUpdateBar_Click(object sender, RoutedEventArgs e)
        {
            if ((pbb.BarBindingVal < 100 && isIncrease)||  pbb.BarBindingVal <= 0  )
            {
                if (string.IsNullOrEmpty(tbBarVal.Text) || 0 == int.Parse(tbBarVal.Text))
                    pbb.BarBindingVal += 10;
                //progressBar.Value = 20;
                else
                    pbb.BarBindingVal += int.Parse(tbBarVal.Text);

                isIncrease = true;
            }
            else
            {
                pbb.BarBindingVal -= int.Parse(tbBarVal.Text);
                isIncrease = false;
            }
        }
    }


    public class ProgressBarBinding : INotifyPropertyChanged
    {

        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, e);
        }

        private float barBindingVal;
        public float BarBindingVal
        {
            get { return barBindingVal; }
            set
            {
                barBindingVal = value;
                OnPropertyChanged(new PropertyChangedEventArgs("BarBindingVal"));
            }
        }
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 WPF ProgressBar 中设置圆角,可以使用样式(Style),具体步骤如下: 1. 在 XAML 中定义一个样式,设置 TargetType 为 ProgressBar: ```xaml <Style TargetType="ProgressBar"> ``` 2. 在样式中添加 ControlTemplate,覆盖 ProgressBar 的默认模板: ```xaml <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ProgressBar"> <!-- 在此添加模板内容 --> </ControlTemplate> </Setter.Value> </Setter> ``` 3. 在 ControlTemplate 中添加一个 Border 元素,作为 ProgressBar 的容器,并设置圆角: ```xaml <Border CornerRadius="10" BorderThickness="1" BorderBrush="Gray"> <Grid x:Name="PART_Track"> <!-- 在此添加 Track(进度条背景)的内容 --> </Grid> <Grid x:Name="PART_Indicator"> <!-- 在此添加 Indicator(进度条显示)的内容 --> </Grid> </Border> ``` 其中,CornerRadius 属性设置圆角半径,BorderThickness 和 BorderBrush 属性设置边框样式。 4. 在 ControlTemplate 中设置 Indicator 的宽度和圆角: ```xaml <Path x:Name="Indicator" Fill="{TemplateBinding Foreground}" Data="M 0,0 L 1,0 1,1 0,1 Z"> <Path.Clip> <RectangleGeometry RadiusX="10" RadiusY="10" Rect="0,0,{TemplateBinding ActualWidth},{TemplateBinding ActualHeight}"/> </Path.Clip> </Path> ``` 其中,Path 元素用于绘制进度条,Clip 属性用于设置 Indicator 的形状,RadiusX 和 RadiusY 属性设置圆角半径。 完整代码示例: ```xaml <Style TargetType="ProgressBar"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ProgressBar"> <Border CornerRadius="10" BorderThickness="1" BorderBrush="Gray"> <Grid x:Name="PART_Track"> <!-- 在此添加 Track(进度条背景)的内容 --> </Grid> <Grid x:Name="PART_Indicator"> <Path x:Name="Indicator" Fill="{TemplateBinding Foreground}" Data="M 0,0 L 1,0 1,1 0,1 Z"> <Path.Clip> <RectangleGeometry RadiusX="10" RadiusY="10" Rect="0,0,{TemplateBinding ActualWidth},{TemplateBinding ActualHeight}"/> </Path.Clip> </Path> </Grid> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值