使用 this 线程,我在我的 MAUI 应用程序上实现了滑块减少预防逻辑。
但是我在
DragCompletedCommand
中也有一个 Slider
,它会执行一些操作。此时,当单击滑块上的下部时间时,DragCompletedCommand
也会点击并执行这些操作。我怎样才能禁用它?
我尝试如下:在
bool
上添加了 viewmodel
变量,并在执行操作之前检查它的值。
public ICommand DragCompletedCommand => new Command(OnDragCompleted);
private void OnDragCompleted(object obj)
{
if (invokeDragCompleted)
{
//My actions
}
}
我正在从
bool
页面的 homepage.xaml.cs
事件设置 ValueChanged
值。
public void SliderValueChanged(object sender, ValueChangedEventArgs args)
{
try
{
Slider slider = (Slider)sender;
IsIncrease = args.NewValue > args.OldValue;
if (!IsIncrease)
{
hpvm.InputTransparent = true;
slider.Value = args.OldValue;
value = args.OldValue;
hpvm.invokeDragCompleted = false;
}
else
{
hpvm.InputTransparent = false;
slider.Value = args.NewValue;
value = args.NewValue;
hpvm.invokeDragCompleted = true;
}
}
catch (Exception ex)
{
Debug.WriteLine("Exception:>>" + ex);
}
}
但是当计时器运行并交替命中 if 和 else 块时,此事件总是会触发。因此
bool
值从这里变为 true 并在 Viewmodel
上执行操作。选择较低时间时,有什么方法可以将 bool
值设置为 false?
我的滑块代码:
<Slider
x:Name="watchme_slider"
Grid.Column="1"
BackgroundColor="White"
MinimumTrackColor="#1c98d7"
MaximumTrackColor="#9a9a9a"
ThumbImageSource="ic_thumb_xx.png"
ValueChanged="SliderValueChanged"
InputTransparent="{Binding InputTransparent}"
Maximum="0.166666667"
Minimum="0"
DragCompletedCommand="{Binding DragCompletedCommand}"
HorizontalOptions="FillAndExpand"/>
计时器在触发
ValueChanged
事件的每一秒运行。如果用户触摸或拖动滑块,此时也会触发 ValueChanged
事件。有什么办法可以找到触发了哪种类型的事件吗?
您在
slider.Value = args.NewValue;
事件中设置 SliderValueChanged
。这就是 if 和 else 块都被命中的原因。
根据我的理解,您想要在
DragCompletedCommand
中执行一些操作,仅当滑块增加其值时。对吗?
我可能会添加一个新字段,或者将其称为
preValue
中的 ViewModel
来存储滑块之前的值。
private double preValue;
并检查当前值是否更大,
[RelayCommand]
public void DragCompleted(object obj)
{
var slider = obj as Slider;
if (slider.Value > preValue)
{
Debug.WriteLine("do some work");
preValue = slider.Value;
}
}
这是 XAML,我使用 Maui CommunityToolkit 中的 EventToCommandBehavior。
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
...
Title="HomePage"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
x:Name="page">
<Slider
x:Name="watchme_slider"
Grid.Column="1"
BackgroundColor="White"
MinimumTrackColor="#1c98d7"
MaximumTrackColor="#9a9a9a"
ThumbImageSource="ic_thumb_xx.png"
ValueChanged="SliderValueChanged"
InputTransparent="{Binding InputTransparent}"
Maximum="0.166666667"
Minimum="0"
HorizontalOptions="FillAndExpand">
<Slider.Behaviors>
<toolkit:EventToCommandBehavior
EventName="DragCompleted"
Command="{Binding Source={x:Reference page}, Path=BindingContext.DragCompletedCommand}"
CommandParameter="{Binding Source={x:Reference watchme_slider}}"
/>
</Slider.Behaviors>
</Slider>