WPF中通过图表MouseDown事件修改圆形进度条Value属性的方法
解决WPF中点击BarGraph矩形更新ProgressCircle值的问题
你的问题核心在于构造函数仅执行一次,且BarGraph的BarValue变化时没有通知MainWindow,所以直接在构造函数里赋值只会设置初始值,后续点击矩形时ProgressCircle不会自动更新。下面提供两种实用的解决方案:
方法一:通过自定义事件传递值
这种方式适合更直接的代码交互,步骤如下:
修改BarGraph控件,添加自定义事件
在你的BarGraph类中,定义一个事件用于通知外部BarValue的变化,然后在Rec_MouseDown中触发这个事件:public int BarValue { get; set; } // 定义自定义事件,传递新的BarValue值 public event EventHandler<int> BarValueChanged; private void Rec_MouseDown(object sender, MouseButtonEventArgs e) { BarValue = Convert.ToInt32(((Rectangle)sender).Height); // 触发事件,通知外部值已更新 BarValueChanged?.Invoke(this, BarValue); }在MainWindow中订阅事件并更新ProgressCircle
在MainWindow的构造函数里,订阅BarGraph的事件,当事件触发时更新圆形进度条的Value:public MainWindow() { InitializeComponent(); // 绑定BarValue变化的事件 bargraph.BarValueChanged += Bargraph_BarValueChanged; } private void Bargraph_BarValueChanged(object sender, int newValue) { // 更新圆形进度条的值 progCircle.Value = newValue; }
方法二:使用WPF依赖属性绑定(更符合WPF设计理念)
这种方式利用WPF的绑定机制,让值的更新自动同步,步骤如下:
将BarGraph的BarValue改为依赖属性
依赖属性是WPF实现数据绑定的核心,修改BarGraph的代码:// 定义BarValue依赖属性 public static readonly DependencyProperty BarValueProperty = DependencyProperty.Register("BarValue", typeof(int), typeof(BarGraph), new PropertyMetadata(0)); public int BarValue { get { return (int)GetValue(BarValueProperty); } set { SetValue(BarValueProperty, value); } } private void Rec_MouseDown(object sender, MouseButtonEventArgs e) { // 更新依赖属性值,绑定会自动同步 BarValue = Convert.ToInt32(((Rectangle)sender).Height); }在XAML中直接绑定ProgressCircle的Value
修改MainWindow的XAML,将ProgressCircle的Value属性绑定到BarGraph的BarValue:<ControlExamplesVS:ProgressCircle x:Name="progCircle" HorizontalAlignment="Left" Height="185" Margin="760,99,0,0" VerticalAlignment="Top" Width="184" IndicatorBrush="Cyan" BackgroundBrush="Transparent" ProgressBorderBrush="DarkCyan" Value="{Binding ElementName=bargraph, Path=BarValue}"/>
为什么原来的方法无效?
你在构造函数中设置progCircle.Value = chart.BarValue时,BarValue还是默认的0值,而且后续点击矩形修改BarValue时,没有任何机制通知MainWindow去更新ProgressCircle的Value,所以圆形进度条不会有变化。上面两种方法分别通过事件通知和依赖属性绑定解决了这个问题。
内容的提问来源于stack exchange,提问作者Zia UsafXai
相关产品推荐
相关产品推荐

