如果调用方法,将切换按钮设置为 false,我的代码在后面
Set toggle Button to false with my code behind if method is called
如果从我的代码后面调用了一个方法,我会尝试将切换按钮设置为 false。
那是我的 xaml 按钮:
<ToggleButton x:Name="StartScan" Grid.Column="1" Margin="20,0,0,0" Content="Start" IsChecked="False" Click="StartScan_Click" Width="80" />
<ProgressBar Name="pbStatus" Grid.Column="2" Height="22" Width="50" Minimum="0" Maximum="100">
<ProgressBar.Style>
<Style TargetType="ProgressBar">
<Setter Property="IsIndeterminate" Value="False"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=StartScan}" Value="True">
<Setter Property="IsIndeterminate" Value="True"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsChecked, ElementName=StartScan}" Value="false">
<Setter Property="IsIndeterminate" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ProgressBar.Style>
</ProgressBar>
我正在做的是,如果我单击我的 Toogle 按钮,我会调用一个方法,那是可行的,但如果 Toggle Button 在我的方法 运行 之后设置为 IsChecked="False"
,那就太好了。
这就是我在后面的代码中使用 Toogle 按钮调用的方法:
async void StartScan_Click(object sender, RoutedEventArgs e)
{
await Task.Run(getAll);
await Task.Delay(1000);
await Task.Run(getGroups);
await Task.Delay(1000);
await Task.Run(GetUsers);
//not working
pbStatus.IsIndeterminate = false;
StartScan.IsChecked = false;
}
首先,很难理解您从这段代码中得到了什么。你已经混合了两种方法。尝试使用 XAML 或代码隐藏,但不要尝试完全实现这两种方法,因为您一无所获并且可读性差。
如果你想在后面的代码中做到这一点,那么去掉 XAML 中的所有样式并保持定义简单:
<ToggleButton x:Name="StartScan" Content="Start" IsChecked="False" Click="StartScan_Click" Width="80" />
<ProgressBar Name="pbStatus" Height="22" Width="80" Minimum="0" Maximum="100" IsIndeterminate="False"/>
在后面的代码中尝试立即将进度设置为不确定。之后执行您的任务,然后将控件的状态设置为之前的状态。另外,我建议您在任务期间禁用该按钮,否则用户可以多次单击它。
private async void StartScan_Click(object sender, RoutedEventArgs e)
{
pbStatus.IsIndeterminate = true;
StartScan.IsEnabled = false;
await Task.Delay(5000);
pbStatus.IsIndeterminate = false;
StartScan.IsEnabled = true;
StartScan.IsChecked = false;
}
如果从我的代码后面调用了一个方法,我会尝试将切换按钮设置为 false。 那是我的 xaml 按钮:
<ToggleButton x:Name="StartScan" Grid.Column="1" Margin="20,0,0,0" Content="Start" IsChecked="False" Click="StartScan_Click" Width="80" />
<ProgressBar Name="pbStatus" Grid.Column="2" Height="22" Width="50" Minimum="0" Maximum="100">
<ProgressBar.Style>
<Style TargetType="ProgressBar">
<Setter Property="IsIndeterminate" Value="False"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=StartScan}" Value="True">
<Setter Property="IsIndeterminate" Value="True"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsChecked, ElementName=StartScan}" Value="false">
<Setter Property="IsIndeterminate" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ProgressBar.Style>
</ProgressBar>
我正在做的是,如果我单击我的 Toogle 按钮,我会调用一个方法,那是可行的,但如果 Toggle Button 在我的方法 运行 之后设置为 IsChecked="False"
,那就太好了。
这就是我在后面的代码中使用 Toogle 按钮调用的方法:
async void StartScan_Click(object sender, RoutedEventArgs e)
{
await Task.Run(getAll);
await Task.Delay(1000);
await Task.Run(getGroups);
await Task.Delay(1000);
await Task.Run(GetUsers);
//not working
pbStatus.IsIndeterminate = false;
StartScan.IsChecked = false;
}
首先,很难理解您从这段代码中得到了什么。你已经混合了两种方法。尝试使用 XAML 或代码隐藏,但不要尝试完全实现这两种方法,因为您一无所获并且可读性差。
如果你想在后面的代码中做到这一点,那么去掉 XAML 中的所有样式并保持定义简单:
<ToggleButton x:Name="StartScan" Content="Start" IsChecked="False" Click="StartScan_Click" Width="80" />
<ProgressBar Name="pbStatus" Height="22" Width="80" Minimum="0" Maximum="100" IsIndeterminate="False"/>
在后面的代码中尝试立即将进度设置为不确定。之后执行您的任务,然后将控件的状态设置为之前的状态。另外,我建议您在任务期间禁用该按钮,否则用户可以多次单击它。
private async void StartScan_Click(object sender, RoutedEventArgs e)
{
pbStatus.IsIndeterminate = true;
StartScan.IsEnabled = false;
await Task.Delay(5000);
pbStatus.IsIndeterminate = false;
StartScan.IsEnabled = true;
StartScan.IsChecked = false;
}