Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Gesto přetažení umožňuje položky a jejich přidružené datové balíčky přetáhnout z jednoho místa na obrazovce do jiného pomocí nepřetržitého gesta. Přetažení může probíhat v jedné aplikaci nebo může začínat v jedné aplikaci a končit jinou.
Důležité
Rozpoznávání gest přetažení je podporováno v systémech iOS, Android a Univerzální platforma Windows (UPW). Na iOSu se ale vyžaduje minimální platforma iOS 11.
Zdroj přetažení, což je prvek, na kterém je spuštěno gesto přetažení, může poskytnout data, která se mají přenést naplněním objektu datového balíčku. Po uvolnění zdroje přetažení dojde k přetažení. Cíl přetažení, který je prvkem pod zdrojem přetažení, pak zpracuje datový balíček.
Proces povolení přetažení v aplikaci je následující:
- Umožňuje přetažení prvku přidáním objektu
DragGestureRecognizerdo jehoGestureRecognizerskolekce. Další informace naleznete v tématu Povolení přetažení. - [volitelné] Vytvoření datového balíčku Xamarin.Forms automaticky naplní datový balíček pro ovládací prvky obrázku a textu, ale pro další obsah budete muset vytvořit vlastní datový balíček. Další informace naleznete v tématu Sestavení datového balíčku.
- Povolte přetažení prvku přidáním objektu
DropGestureRecognizerjehoGestureRecognizerskolekce. Další informace najdete v tématu Povolení přetažení. - [volitelné]
DropGestureRecognizer.DragOverZpracujte událost a označte typ operace, kterou cíl vyřazuje. Další informace naleznete v tématu Zpracování události DragOver. - [volitelné] Zpracování datového balíčku pro příjem vyřazeného obsahu Xamarin.Forms automaticky načte obrázky a textová data z datového balíčku, ale pro další obsah budete muset datový balíček zpracovat. Další informace naleznete v tématu Zpracování datového balíčku.
Poznámka:
Přetažení položek do a z objektu je CollectionView aktuálně nepodporované.
Povolit přetažení
Rozpoznávání Xamarin.Formsgest přetažením je poskytováno DragGestureRecognizer třídou. Tato třída definuje následující vlastnosti:
CanDrag, typubool, který označuje, zda prvek rozpoznávání gest je připojen k může být zdroj přetažení. Výchozí hodnota této vlastnosti jetrue.DragStartingCommand, typuICommand, který se spustí při prvním rozpoznané gesto přetažení.DragStartingCommandParameter, typuobject, což je parametr, který je předán doDragStartingCommand.DropCompletedCommand, typuICommand, který se spustí při přetažení zdroje.DropCompletedCommandParameter, typuobject, což je parametr, který je předán doDropCompletedCommand.
Tyto vlastnosti jsou podporovány BindableProperty objekty, což znamená, že mohou být cíle datových vazeb a stylovány.
Třída DragGestureRecognizer také definuje DragStarting a DropCompleted události, které se aktivují za předpokladu CanDrag , že vlastnost je true. DragGestureRecognizer Když objekt zjistí gesto přetažení, spustí DragStartingCommand a vyvolá DragStarting událost. Když pak DragGestureRecognizer objekt zjistí dokončení gesta přetažení, spustí DropCompletedCommand a vyvolá DropCompleted událost.
Objekt DragStartingEventArgs , který doprovází DragStarting událost, definuje následující vlastnosti:
Handled, typubooloznačuje, zda obslužná rutina události zpracovala událost nebo zda Xamarin.Forms má pokračovat ve vlastním zpracování.Cancel, typubooloznačuje, zda má být událost zrušena.Data, typuDataPackageoznačuje datový balíček, který doprovází zdroj přetažení. Toto je vlastnost jen pro čtení.
Následující příklad XAML ukazuje připojenou DragGestureRecognizer k:Image
<Image Source="monkeyface.png">
<Image.GestureRecognizers>
<DragGestureRecognizer />
</Image.GestureRecognizers>
</Image>
V tomto příkladu lze gesto přetažení zahájit na .Image
Tip
V iOSu, Androidu a UPW se spustí gesto přetažení s dlouhým stisknutím a tažením.
Vytvoření datového balíčku
Xamarin.Forms automaticky sestaví datový balíček pro vás při spuštění přetažení pro následující ovládací prvky:
- Textové ovládací prvky. Textové hodnoty lze přetáhnout z
CheckBox, ,DatePicker,EditorEntry,Label,RadioButton, ,Switch, aTimePickerobjektů. - Ovládací prvky obrázku Obrázky lze přetáhnout z
Button,ImageaImageButtonovládacích prvků.
V následující tabulce jsou uvedeny vlastnosti, které se čtou, a všechny pokusy o převod při přetažení na ovládací prvek textu:
| Control | Vlastnost | Převod |
|---|---|---|
CheckBox |
IsChecked |
boolpřevedeno na .string |
DatePicker |
Date |
DateTimepřevedeno na .string |
Editor |
Text |
|
Entry |
Text |
|
Label |
Text |
|
RadioButton |
IsChecked |
boolpřevedeno na .string |
Switch |
IsToggled |
boolpřevedeno na .string |
TimePicker |
Time |
TimeSpanpřevedeno na .string |
V případě jiného obsahu než textu a obrázků budete muset vytvořit datový balíček sami.
Datové balíčky jsou reprezentovány DataPackage třídou, která definuje následující vlastnosti:
Properties, typuDataPackagePropertySet, což je kolekce vlastností, které tvoří data obsažená v saděDataPackage. Tato vlastnost je jen pro čtení.Image, typuImageSource, což je obrázek obsažený v souboruDataPackage.Text, typustring, což je text obsažený v saděDataPackage.View, typuDataPackageView, což je verze jenDataPackagepro čtení .
Třída DataPackagePropertySet představuje tašku vlastností uloženou Dictionary<string,object>jako . Informace o třídě naleznete v DataPackageView tématu Zpracování datového balíčku.
Ukládání obrázků nebo textových dat
Obrázky nebo textová data lze přidružit ke zdroji přetažení uložením dat do objektu DataPackage.Image nebo DataPackage.Text vlastnosti. To lze provést v obslužné rutině DragStarting události.
Následující příklad XAML ukazuje DragGestureRecognizer , který zaregistruje obslužnou rutinu DragStarting události:
<Path Stroke="Black"
StrokeThickness="4">
<Path.GestureRecognizers>
<DragGestureRecognizer DragStarting="OnDragStarting" />
</Path.GestureRecognizers>
<Path.Data>
<!-- PathGeometry goes here -->
</Path.Data>
</Path>
V tomto příkladu DragGestureRecognizer je připojen k objektu Path . Událost DragStarting se aktivuje, když se zjistí gesto přetažení na Pathobslužné rutině OnDragStarting události:
void OnDragStarting(object sender, DragStartingEventArgs e)
{
e.Data.Text = "My text data goes here";
}
Objekt DragStartingEventArgs , který doprovází DragStarting událost má Data vlastnost typu DataPackage. V tomto příkladu Text je vlastnost objektu DataPackage nastavena na hodnotu string. K DataPackage poté lze získat přístup při přetažení, aby bylo možné načíst string.
Ukládání dat do tašky vlastností
Veškerá data, včetně obrázků a textu, lze přidružit ke zdroji přetažení uložením dat do DataPackage.Properties kolekce. To lze provést v obslužné rutině DragStarting události.
Následující příklad XAML ukazuje DragGestureRecognizer , který zaregistruje obslužnou rutinu DragStarting události:
<Rectangle Stroke="Red"
Fill="DarkBlue"
StrokeThickness="4"
HeightRequest="200"
WidthRequest="200">
<Rectangle.GestureRecognizers>
<DragGestureRecognizer DragStarting="OnDragStarting" />
</Rectangle.GestureRecognizers>
</Rectangle>
V tomto příkladu DragGestureRecognizer je připojen k objektu Rectangle . Událost DragStarting se aktivuje, když se zjistí gesto přetažení na Rectangleobslužné rutině OnDragStarting události:
void OnDragStarting(object sender, DragStartingEventArgs e)
{
Shape shape = (sender as Element).Parent as Shape;
e.Data.Properties.Add("Square", new Square(shape.Width, shape.Height));
}
Objekt DragStartingEventArgs , který doprovází DragStarting událost má Data vlastnost typu DataPackage. Kolekci Properties objektu DataPackage , což je Dictionary<string, object> kolekce, lze upravit tak, aby ukládaly požadovaná data. V tomto příkladu Properties se slovník upraví tak, aby ukládaný Square objekt, který představuje velikost Rectangleklíče "Square".
Povolit přetažení
Rozpoznávání Xamarin.Formsgest přetažení poskytuje DropGestureRecognizer třída. Tato třída definuje následující vlastnosti:
AllowDrop, typubool, který označuje, zda prvek rozpoznávání gest je připojen k může být cíl přetažení. Výchozí hodnota této vlastnosti jetrue.DragOverCommand, typuICommand, který se spustí při přetažení zdroje přetáhnout přes cíl přetažení.DragOverCommandParameter, typuobject, což je parametr, který je předán doDragOverCommand.DragLeaveCommand, typuICommand, který se spustí při přetažení zdroje je přetažen z cíle přetažení.DragLeaveCommandParameter, typuobject, což je parametr, který je předán doDragLeaveCommand.DropCommand, typuICommand, který se spustí při přetažení zdroje přes cíl přetažení.DropCommandParameter, typuobject, což je parametr, který je předán doDropCommand.
Tyto vlastnosti jsou podporovány BindableProperty objekty, což znamená, že mohou být cíle datových vazeb a stylovány.
Třída DropGestureRecognizer také definuje DragOver, DragLeavea Drop události, které se aktivují za předpokladu AllowDrop , že vlastnost je true. DropGestureRecognizer Když rozpozná zdroj přetažení přes cíl přetažení, spustí DragOverCommand a vyvolá DragOver událost. Pokud je pak zdroj přetažení přetažen mimo cíl přetažení, DropGestureRecognizer spustí DragLeaveCommand událost a vyvolá ji DragLeave . Nakonec, když DropGestureRecognizer rozpozná gesto přetažení přes cíl přetažení, spustí DropCommand a vyvolá Drop událost.
Třída DragEventArgs , která doprovází události DragOver DragLeave , definuje následující vlastnosti:
Data, typuDataPackage, který obsahuje data přidružená ke zdroji přetažení. Tato vlastnost je jen ke čtení.AcceptedOperation, typuDataPackageOperation, který určuje, které operace jsou povoleny cílem přetažení.
Informace o výčtu DataPackageOperation naleznete v tématu Zpracování události DragOver.
Třída DropEventArgs , která doprovází Drop událost, definuje následující vlastnosti:
Data, typuDataPackageView, což je verze datového balíčku jen pro čtení.Handled, typubooloznačuje, zda obslužná rutina události zpracovala událost nebo zda Xamarin.Forms má pokračovat ve vlastním zpracování.
Následující příklad XAML ukazuje připojenou DropGestureRecognizer k:Image
<Image BackgroundColor="Silver"
HeightRequest="300"
WidthRequest="250">
<Image.GestureRecognizers>
<DropGestureRecognizer />
</Image.GestureRecognizers>
</Image>
V tomto příkladu, když je zdroj přetažení na Image cíl přetažení, bude zdroj přetažení zkopírován do cíle přetažení za předpokladu, že zdroj přetažení je ImageSource. K tomu dochází, protože Xamarin.Forms automaticky kopíruje přetahované obrázky a text do kompatibilních cílů přetažení.
Zpracování události DragOver
Událost DropGestureRecognizer.DragOver může být volitelně zpracována tak, aby označovala, jaký typ operací povoluje cíl odstranění. Toho lze dosáhnout nastavením AcceptedOperation vlastnosti, typu DataPackageOperation, DragEventArgs objektu, který doprovází DragOver událost.
Výčet DataPackageOperation definuje následující členy:
Noneoznačuje, že nebude provedena žádná akce.Copyoznačuje, že se zdrojový obsah přetažení zkopíruje do cíle přetažení.
Důležité
Při vytvoření objektu DragEventArgs je AcceptedOperation vlastnost ve výchozím nastavení DataPackageOperation.Copy.
Následující příklad XAML ukazuje DropGestureRecognizer , který zaregistruje obslužnou rutinu DragOver události:
<Image BackgroundColor="Silver"
HeightRequest="300"
WidthRequest="250">
<Image.GestureRecognizers>
<DropGestureRecognizer DragOver="OnDragOver" />
</Image.GestureRecognizers>
</Image>
V tomto příkladu DropGestureRecognizer je připojen k objektu Image . Událost DragOver se aktivuje, když je zdroj přetažení přetažen přes cíl přetažení, ale nebyl vynechán, což spustí obslužnou rutinu OnDragOver události:
void OnDragOver(object sender, DragEventArgs e)
{
e.AcceptedOperation = DataPackageOperation.None;
}
V tomto příkladu AcceptedOperation je vlastnost objektu DragEventArgs nastavena na DataPackageOperation.None. Tím se zajistí, že při přetažení zdroje přes cíl přetažení nedojde k žádné akci.
Zpracování datového balíčku
Událost Drop se aktivuje, když se zdroj přetažení uvolní přes cíl přetažení. Pokud k tomu dojde, Xamarin.Forms automaticky se pokusí načíst data z datového balíčku, když je zdroj přetažení na následující ovládací prvky:
- Textové ovládací prvky. Textové hodnoty lze přetáhnout na
CheckBox, ,DatePicker,EditorEntry,Label,RadioButton, , ,Switch, aTimePickerobjekty. - Ovládací prvky obrázku Obrázky lze přetáhnout na
Button,ImageaImageButtonovládací prvky.
V následující tabulce jsou uvedeny vlastnosti, které jsou nastaveny, a všechny pokusy o převod, když textový zdroj přetažení na ovládací prvek textu vynechá:
| Control | Vlastnost | Převod |
|---|---|---|
CheckBox |
IsChecked |
stringje převeden na .bool |
DatePicker |
Date |
stringje převeden na .DateTime |
Editor |
Text |
|
Entry |
Text |
|
Label |
Text |
|
RadioButton |
IsChecked |
stringje převeden na .bool |
Switch |
IsToggled |
stringje převeden na .bool |
TimePicker |
Time |
stringje převeden na .TimeSpan |
U jiného obsahu než textu a obrázků budete muset balíček dat zpracovat sami.
Třída DropEventArgs , která doprovází Drop událost definuje Data vlastnost typu DataPackageView. Tato vlastnost představuje verzi datového balíčku jen pro čtení.
Načtení obrázků nebo textových dat
Obrázky nebo textová data lze načíst z datového balíčku v obslužné rutině Drop události pomocí metod definovaných DataPackageView ve třídě.
Třída DataPackageView obsahuje GetImageAsync a GetTextAsync metody. Metoda GetImageAsync načte obrázek z datového balíčku, který byl uložen ve DataPackage.Image vlastnosti, a vrátí Task<ImageSource>. GetTextAsync Podobně metoda načte text z datového balíčku, který byl uložen ve DataPackage.Text vlastnosti a vrací Task<string>.
Následující příklad ukazuje obslužnou rutinu Drop události, která načte text z datového balíčku pro Path:
async void OnDrop(object sender, DropEventArgs e)
{
string text = await e.Data.GetTextAsync();
// Perform logic to take action based on the text value.
}
V tomto příkladu se textová data načtou z datového balíčku pomocí GetTextAsync metody. Pak můžete provést akci založenou na textové hodnotě.
Načtení dat z tašky vlastností
Všechna data lze načíst z datového balíčku v obslužné rutině Drop události, a to přístupem ke Properties kolekci datového balíčku.
Třída DataPackageView definuje Properties vlastnost typu DataPackagePropertySetView. Třída DataPackagePropertySetView představuje tašku vlastností jen pro čtení uloženou Dictionary<string, object>jako .
Následující příklad ukazuje obslužnou rutinu Drop události, která načte data z tašky vlastností datového balíčku pro Rectangle:
void OnDrop(object sender, DropEventArgs e)
{
Square square = (Square)e.Data.Properties["Square"];
// Perform logic to take action based on retrieved value.
}
V tomto příkladu se Square objekt načte z kontejneru vlastností datového balíčku zadáním klíče slovníku "Square". Pak lze provést akci založenou na načtené hodnotě.