问题描述
我是移动开发的新手,这是我第一次创建视图。据我所知,该按钮在网格内不可点击。我试图将网格包装在 StackLayout 中并搜索我找不到的解决方案。
Documentos.xaml 代码:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:viewmodels="clr-namespace:AppQ4evo.Models"
x:Class="AppQ4evo.Views.Documentos"
BackgroundColor="White">
<ContentPage.BindingContext>
<viewmodels:DocumentsBindingModel />
</ContentPage.BindingContext>
<ContentPage.toolbaritems>
<ToolbarItem x:Name="iconAttach" Order="Primary" Icon="attach.png" Priority="-1" />
</ContentPage.toolbaritems>
<!--<AbsoluteLayout Padding="0" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">-->
<Grid x:Name="docs" Padding="-2" BackgroundColor="Aquamarine">
<Grid.RowDeFinitions>
<RowDeFinition Height="*" />
<RowDeFinition Height="*"/>
</Grid.RowDeFinitions>
<StackLayout Margin="10,20">
<Label Text="Data Documento: "/>
<Label Text="Número externo: "/>
<Label Text="Fornecedor: "/>
</StackLayout>
<StackLayout Margin="0,100">
<Button x:Name="btnAdd" Text="Adicionar" Clicked="btnAddPopup_Clicked" />
</StackLayout>
<Grid x:Name="ListViewHeaders" Margin="0,170,0">
<Grid.RowDeFinitions>
<RowDeFinition Height="40"/>
<RowDeFinition Height="Auto"/>
</Grid.RowDeFinitions>
<Grid.ColumnDeFinitions>
<ColumnDeFinition Width="*"/>
<ColumnDeFinition Width="60" />
<ColumnDeFinition Width="65" />
<ColumnDeFinition Width="80" />
<ColumnDeFinition Width="25" />
<ColumnDeFinition Width="60" />
</Grid.ColumnDeFinitions>
<BoxView Color="Black" Grid.Row="0" Grid.ColumnSpan="8" HeightRequest="0.5" />
<BoxView Color="DimGray" Grid.Row="0" Grid.ColumnSpan="8" />
<Label Grid.Column="1" Text="Produto" XAlign="Center" YAlign="Center" TextColor="White" FontAttributes="Bold" FontSize="Small"/>
<Label Grid.Column="2" Text="Descrição" XAlign="Center" YAlign="Center" TextColor="White" FontAttributes="Bold" FontSize="Small"/>
<Label Grid.Column="3" Text="Observação" XAlign="Center" YAlign="Center" TextColor="White" FontAttributes="Bold" FontSize="Small"/>
<Label Grid.Column="4" Text="Qtd" XAlign="Center" YAlign="Center" TextColor="White" FontAttributes="Bold" FontSize="Small"/>
<Label Grid.Column="5" Text="Valor Unitário" XAlign="Center" YAlign="Center" TextColor="White" FontAttributes="Bold" FontSize="Small"/>
<Label Grid.Column="6" Text="IVA" XAlign="Center" YAlign="Center" TextColor="White" FontAttributes="Bold" FontSize="Small"/>
</Grid>
<AbsoluteLayout x:Name="absLayout" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
<ListView x:Name="DocumentsList" ItemsSource="{Binding DocumentosList}"
HasUnevenRows="True"
Margin="0,209" BackgroundColor="White" HeightRequest="{Binding Path=Height,Source={x:Reference absLayout}}"
WidthRequest="{Binding Path=Width,Source={x:Reference absLayout}}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<Grid>
<Grid.RowDeFinitions>
<RowDeFinition Height="30"></RowDeFinition>
</Grid.RowDeFinitions>
<Grid.ColumnDeFinitions>
<ColumnDeFinition Width="30"></ColumnDeFinition>
<ColumnDeFinition Width="50"></ColumnDeFinition>
<ColumnDeFinition Width="70"></ColumnDeFinition>
<ColumnDeFinition Width="80"></ColumnDeFinition>
<ColumnDeFinition Width="30"></ColumnDeFinition>
<ColumnDeFinition Width="50"></ColumnDeFinition>
<ColumnDeFinition Width="45"></ColumnDeFinition>
</Grid.ColumnDeFinitions>
<Label Grid.Row="0" Grid.Column="1" Text="{Binding Produto}" XAlign="Center" YAlign="Center" TextColor="Black" FontAttributes="Bold"/>
<Label Grid.Row="0" Grid.Column="2" Text="{Binding Descricao}" XAlign="Center" YAlign="Center" TextColor="Black" FontAttributes="Bold"/>
<Label Grid.Row="0" Grid.Column="3" Text="{Binding Observacao}" XAlign="Center" YAlign="Center" TextColor="Black" FontAttributes="Bold"/>
<Label Grid.Row="0" Grid.Column="4" Text="{Binding Quantidade}" XAlign="Center" YAlign="Center" TextColor="Black" FontAttributes="Bold"/>
<Label Grid.Row="0" Grid.Column="5" Text="{Binding ValorUnitario}" XAlign="Center" YAlign="Center" TextColor="Black" FontAttributes="Bold"/>
<Label Grid.Row="0" Grid.Column="6" Text="{Binding Iva}" XAlign="Center" YAlign="Center" TextColor="Black" FontAttributes="Bold"/>
</Grid>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</AbsoluteLayout>
</Grid>
<!--<ContentView x:Name="popupAddDocumentView" BackgroundColor="White" Padding="10,0" IsVisible="false" AbsoluteLayout.LayoutBounds="0,1,1">
<StackLayout VerticalOptions="Center" HorizontalOptions="Center">
<StackLayout Orientation="Vertical" HeightRequest="240" WidthRequest="300" BackgroundColor="White">
<Image HorizontalOptions="End" Source="close.png" HeightRequest="20" WidthRequest="20">
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="OnImageNaMetapped_ClosePopup" NumberOfTapsrequired="1" />
</Image.GestureRecognizers>
</Image>
<Entry x:Name="ProdutoEntry" Margin="20,20,0" Placeholder="Introduza o produto" />
<Button x:Name="btnAddDocument" Margin="20,0" Clicked="btnAddDocument_Clicked" Text="Adicionar" />
</StackLayout>
</StackLayout>
</ContentView>
</AbsoluteLayout>-->
</ContentPage>
Documentos.xaml.cs 代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace AppQ4evo.Views
{
[XamlCompilation(XamlCompilationoptions.Compile)]
public partial class Documentos : ContentPage
{
DocumentsBindingModel documents;
public Documentos()
{
InitializeComponent();
documents = new DocumentsBindingModel();
}
private void btnAddPopup_Clicked(object sender,EventArgs e)
{
Console.WriteLine("Olá Tren");
//popupAddDocumentView.IsVisible = true;
}
private void OnImageNaMetapped_ClosePopup(object sender,EventArgs e)
{
try
{
//popupAddDocumentView.IsVisible = false;
}
catch (Exception ex)
{
}
}
private void btnAddDocument_Clicked(object sender,EventArgs e)
{
//popupAddDocumentView.IsVisible = false;
//DocumentosModel documentosBindingModel = new DocumentosModel() { Produto = ProdutoEntry.Text };
//documents.DocumentosList.Add(documentosBindingModel);
//BindingContext = documents;
//DocumentsList.IsRefreshing = false;
}
}
}
有没有办法解决这个问题?
最好的问候
解决方法
就像 Jason 所说的,一种方法是指定 Grid 的行。
<Grid
x:Name="docs"
Padding="-2"
BackgroundColor="Aquamarine">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackLayout Grid.Row="0" Margin="10,20">
<Label Text="Data Documento: " />
<Label Text="Número externo: " />
<Label Text="Fornecedor: " />
</StackLayout>
<StackLayout Grid.Row="1" Margin="0,100">
<Button
x:Name="btnAdd"
Clicked="btnAddPopup_Clicked"
Text="Adicionar" />
</StackLayout>
<Grid
x:Name="ListViewHeaders"
Grid.Row="2"
Margin="0,170,0">
........
</Grid>
<AbsoluteLayout
x:Name="absLayout"
Grid.Row="3"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand">
........
</AbsoluteLayout>
</Grid>
另一种方法是使用 StackLayout 而不是 Grid。
<StackLayout
x:Name="docs"
Padding="-2"
BackgroundColor="Aquamarine">
<StackLayout Margin="10,20">
<Label Text="Data Documento: " />
<Label Text="Número externo: " />
<Label Text="Fornecedor: " />
</StackLayout>
<StackLayout Margin="0,100">
<Button
x:Name="btnAdd"
Clicked="btnAddPopup_Clicked"
Text="Adicionar" />
</StackLayout>
<Grid
x:Name="ListViewHeaders"
Margin="0,0">
..........
</Grid>
<AbsoluteLayout
x:Name="absLayout"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand">
..........
</AbsoluteLayout>
</StackLayout>