Начинаю вникать в xamarin. Решил написать простенький проект а-ля заметочника. Делаю все по паттерну MVVM. Проблема следующая: нужно разместить 2 списка, слева и справа, они разных размеров, и не зависимы друг от друга, вот пока сделал примерно так:
Но суть в том, что ListView имеет в себе свой scroll, и я без понятия как его можно отключить.. наваял вообще так:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Diary.Views.NotesListPage">
<ContentPage.Padding>
<OnPlatform x:TypeArguments="Thickness">
<On Platform="iOS" Value="10, 20, 10, 0" />
<On Platform="Android" Value="10, 0" />
</OnPlatform>
</ContentPage.Padding>
<StackLayout>
<Button Text="Добавить" Command="{Binding CreateNoteCommand}" />
<ScrollView>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ListView x:Name="NoteListLeft" ItemsSource="{Binding NotesLeft}"
SelectedItem="{Binding SelectedNote, Mode=TwoWay}" HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ContentView Padding="5">
<Frame OutlineColor="Black"
Padding="10">
<StackLayout Orientation="Horizontal">
<!--<BoxView Color="{Binding Color}"
WidthRequest="50"
HeightRequest="50" />-->
<StackLayout>
<Label Text="{Binding Title}" FontAttributes="Bold" FontSize="Medium" />
<Label Text="{Binding Message}" FontSize="Small" />
</StackLayout>
</StackLayout>
</Frame>
</ContentView>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<ListView Grid.Column="1" x:Name="NoteListRight" ItemsSource="{Binding NotesRight}"
SelectedItem="{Binding SelectedNote, Mode=TwoWay}" HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ContentView Padding="5">
<Frame OutlineColor="Black"
Padding="10">
<StackLayout Orientation="Horizontal">
<!--<BoxView Color="{Binding Color}"
WidthRequest="50"
HeightRequest="50" />-->
<StackLayout>
<Label Text="{Binding Title}" FontAttributes="Bold" FontSize="Medium" />
<Label Text="{Binding Message}" FontSize="Small" />
</StackLayout>
</StackLayout>
</Frame>
</ContentView>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</ScrollView>
</StackLayout>
</ContentPage>
Это можно реализовать путем создания собственного рендера. В общий проект добавляете следующий класс:
public class CustomListview : ListView {}
В проект Android:
public class CustomListViewRenderer: ListViewRenderer
{
Context _context;
public CustomListViewRenderer(Context context): base(context)
{
_context = context;
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.ListView> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.VerticalScrollBarEnabled = false;
}
}
}
Не забудьте добавить перед namespace в Android проекте
[assembly: ExportRenderer(typeof(CustomListview), typeof(CustomListViewRenderer))]
Используется в XAML так(при условии что класс CustomListview объявлен в корне общего проекта):
xmlns:local="clr-namespace:Имя проекта"
<local:CustomListview></local:CustomListview>
Подробнее о custom renderer можно почитать здесь
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
узнать на php c какой формы ее класс пришел ajax запрос? ели с классом class_1 оправить 1 собщение, если class_2 - второе
Подскажите как сделать свой продукт платным с выдачей лицензией на него