У меня в пользовательском интерфейсе есть ползунок, и я не могу его правильно переместить.
Ниже приведен код:
<Slider
x:Name = "watchme_slider"
Grid.Column = "1"
BackgroundColor = "White"
MinimumTrackColor = "#1c98d7"
MaximumTrackColor = "#9a9a9a"
ThumbImageSource = "ic_thumb_xx.png"
ValueChanged = "SliderValueChanged"
Maximum = "0.166666667"
Minimum = "0"
HorizontalOptions = "FillAndExpand"/>
Этот слайдер находится на ContentView
, а ниже приведен полный код xaml:
<?xml version = "1.0" encoding = "utf-8" ?>
<ContentView
xmlns = "http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x = "http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit = "http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
xmlns:d = "http://xamarin.com/schemas/2014/forms/design"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d"
NavigationPage.HasNavigationBar = "false"
BackgroundColor = "White"
x:Class = "MyProjectName.Pages.HomePage">
<StackLayout
Orientation = "Vertical">
<ScrollView>
<StackLayout>
<Frame
BorderColor = "#ffffff"
BackgroundColor = "#ededed"
Margin = "10,10,10,5"
HasShadow = "False"
CornerRadius = "10"
Padding = "5">
<StackLayout
Margin = "5"
Orientation = "Vertical">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width = "0.5*" />
<ColumnDefinition Width = "9.5*" />
</Grid.ColumnDefinitions>
<Label
x:Name = "slider_timer_label"
Grid.Column = "1"
Text = " "
Margin = "0,0,0,5"
Padding = "3"
HorizontalOptions = "Start"
HorizontalTextAlignment = "Center"
VerticalOptions = "EndAndExpand"
TextColor = "#ededed">
<Label.FontSize>
<OnIdiom x:TypeArguments = "x:Double">
<OnIdiom.Phone>12</OnIdiom.Phone>
<OnIdiom.Tablet>18</OnIdiom.Tablet>
<OnIdiom.Desktop>12</OnIdiom.Desktop>
</OnIdiom>
</Label.FontSize>
</Label>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width = "1*" />
<ColumnDefinition Width = "9*" />
</Grid.ColumnDefinitions>
<Label
Margin = "5"
HorizontalTextAlignment = "End"
Grid.Column = "0"
Text = "0"
TextColor = "Black">
<Label.FontSize>
<OnIdiom x:TypeArguments = "x:Double">
<OnIdiom.Phone>16</OnIdiom.Phone>
<OnIdiom.Tablet>24</OnIdiom.Tablet>
<OnIdiom.Desktop>16</OnIdiom.Desktop>
</OnIdiom>
</Label.FontSize>
</Label>
<Slider
x:Name = "watchme_slider"
Grid.Column = "1"
BackgroundColor = "White"
MinimumTrackColor = "#1c98d7"
MaximumTrackColor = "#9a9a9a"
ThumbImageSource = "ic_thumb_xx.png"
ValueChanged = "SliderValueChanged"
Maximum = "0.166666667"
Minimum = "0"
HorizontalOptions = "FillAndExpand"/>
</Grid>
<Label
x:Name = "watchme_timer_label"
Margin = "5,10,5,10"
Text = " "
HorizontalTextAlignment = "Center"
HorizontalOptions = "CenterAndExpand"
TextColor = "#ededed">
<Label.FontSize>
<OnIdiom x:TypeArguments = "x:Double">
<OnIdiom.Phone>16</OnIdiom.Phone>
<OnIdiom.Tablet>24</OnIdiom.Tablet>
<OnIdiom.Desktop>16</OnIdiom.Desktop>
</OnIdiom>
</Label.FontSize>
</Label>
</StackLayout>
</Frame>
</StackLayout>
</ScrollView>
</StackLayout>
</ContentView>
Я попробовал слайдер в демонстрационном проекте, и он работает нормально. Я думаю, что проблема может быть связана с родительским макетом моего пользовательского интерфейса. Я загрузил демо-проект здесь для воспроизведения этой проблемы.
@Jason При перетаскивании ползунка он не движется.
Из документа CarouselView
По умолчанию CarouselView отображает элементы в горизонтальной ориентации. На экране будет отображаться один элемент, а жесты пролистывания позволят осуществлять навигацию вперед и назад по коллекции элементов.
Эта проблема связана с конфликтом событий прокрутки. Когда вы прокручиваете слайд, событие прокрутки будет фиксироваться жестами прокрутки CarouselView.
Вы можете установить IsSwipeEnabled = "False"
для своего CarouselView, чтобы ваш слайдер можно было прокручивать нормально. Если вам нужно переключить другие элементы в CarouselView, вы можете использовать для этого carouselView.ScrollTo();
.
<CarouselView
x:Name = "carouselView"
IsSwipeEnabled = "False"
Loop = "False">
Кстати, если вы не хотите ставить IsSwipeEnabled = "False"
, то вместо слайдера можно использовать кнопки увеличения и уменьшения.
Сообщество отметило, что между ними существует конфликт по Android. Но в качестве обходного пути, если вы хотите одновременно перетаскивать ползунок и прокручивать CarouselView, вы можете попробовать использовать Maui Handler, чтобы справиться с этим.
Вот соответствующий код,
#if ANDROID
using Android.Views;
#endif
public partial class CarouselHomePage : ContentPage
{
public CarouselHomePage()
{
InitializeComponent();
ModifySlider();
}
void ModifySlider()
{
Microsoft.Maui.Handlers.SliderHandler.Mapper.AppendToMapping("MyCustomization", (handler, view) =>
{
#if ANDROID
handler.PlatformView.SetOnTouchListener(new SliderListener());
#endif
});
}
#if ANDROID
public class SliderListener : Java.Lang.Object, Android.Views.View.IOnTouchListener
{
public bool OnTouch(global::Android.Views.View v, MotionEvent e)
{
if (e.Action == MotionEventActions.Down || e.Action == MotionEventActions.Move)
{
v.Parent.RequestDisallowInterceptTouchEvent(true);
}
else
{
v.Parent.RequestDisallowInterceptTouchEvent(false);
}
return false;
}
}
#endif
}
Кроме того, если вы просто хотите использовать обработчики для конкретных экземпляров элемента управления, вы можете обратиться к разделу настроить конкретный экземпляр элемента управления.
Надеюсь, поможет!
Любые операторы использования, которые мне нужно добавить для этого, я получаю ошибки почти для всех строк.
Да, есть некоторые операторы использования, потому что мы используем собственный код Android. Я обновлю свой ответ как можно скорее.
Я обновил свой ответ и проверил на своей стороне. Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы.
"не могу нормально сдвинуть" - что это значит?