如何从我的应用程序访问我的CircleProgressBar
本文关键字:我的 访问 CircleProgressBar 应用程序 | 更新日期: 2023-09-27 18:24:07
我成功地实现了以下解决方案:WPF循环进度条
我唯一的问题是我的AXML使用:
xmlns:local="clr-namespace:MyNameSpace"
<local:CircularProgressBar HorizontalAlignment="Center" VerticalAlignment="Center"
SegmentColor="#FF878889" StrokeThickness="8" Percentage="100" />
<local:CircularProgressBar HorizontalAlignment="Center" VerticalAlignment="Center"
Percentage="{Binding Value, ElementName=slider}" SegmentColor="#026873" StrokeThickness="8" />
如何在加载时隐藏CircleProgressBar,以及如何从WPF应用程序的代码中更新或启动它?
目前,进度指示器绘制在每个负载上。
编辑:转换器似乎在工作,但现在画了一个圆圈,什么也没发生?这是我的代码:
BooleanToVisibilityConverter convert = new BooleanToVisibilityConverter();
System.Globalization.CultureInfo culture = null;
// public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
myName.Visibility = (System.Windows.Visibility) convert.Convert(true, this.GetType(), myName, culture);
//listBoxTrackers.Items.Clear();
readInputFile(dialogFileName);
您可以使用绑定来实现类似的功能。也不要忘记
xmlns:DesignInControl="clr-namespace:***"
xmlns:converter="clr-namespace:***"
主窗口Xaml:
<Window.Resources>
<converter:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</Window.Resources>
<Grid Visibility="{Binding Visibility, Converter={StaticResource BooleanToVisibilityConverter}}">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid HorizontalAlignment="Center" VerticalAlignment="Center">
<DesignInControl:CircularProgressBar HorizontalAlignment="Center" VerticalAlignment="Center"
SegmentColor="#FF878889" StrokeThickness="25" Percentage="100" />
<DesignInControl:CircularProgressBar HorizontalAlignment="Center" VerticalAlignment="Center"
Percentage="{Binding Percentage}" SegmentColor="#026873" StrokeThickness="25" />
</Grid>
<Grid HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Grid HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Grid HorizontalAlignment="Center" VerticalAlignment="Center"/>
</StackPanel>
<Slider x:Name="slider" Grid.Row="1" Maximum="100" Value="60" Visibility="Hidden"/>
</Grid>
主窗口.cs:
namespace WpfApplication
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new Data();
}
}
public class Data:INotifyPropertyChanged
{
private bool visibility;
public bool Visibility
{
get
{
return this.visibility;
}
set
{
this.visibility = value;
this.RaisePropertyChanged("Visibility");
}
}
private double percentage;
public double Percentage
{
get
{
return this.percentage;
}
set
{
this.percentage = value;
this.RaisePropertyChanged("Percentage");
}
}
public Data()
{
Action SomeWork = new Action(DoWork);
IAsyncResult result = SomeWork.BeginInvoke(null, null);
}
public void DoWork()
{
System.Threading.Thread.Sleep(3000);
Visibility = true;
for (int i=0;i<100;i++)
{
System.Threading.Thread.Sleep(300);
Percentage += 1;
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string info)
{
if (PropertyChanged!=null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
}
BooleanToVisibilityConverter.cs
class BooleanToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is Boolean && (bool)value)
{
return Visibility.Visible;
}
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is Visibility && (Visibility)value == Visibility.Visible)
{
return true;
}
return false;
}
}