2016-10-02 9 views
0

私は写真を表示するためにGridViewを使用し、ユーザが新しい項目をフォームに追加できるようにエレガントな方法で検索します。UWP - GridView:最後の項目の後に "追加"ボタンを追加する方法は?

  • フォームには多くのフィールドが含まれています。ピボットに表示され、各ピボットアイテムはフォームのカテゴリを表します。
  • 一部のカテゴリには、1つ以上の子アイテムが含まれています。マスター - 詳細ページで表示されます。

写真のリストを表示する必要があるのは、写真のようにフォームの「サブサブアイテム」を表しているため、CommandBarで新しい写真の追加を管理しません。しかし、私は写真を含むGridViewの最後の項目の後に "追加"ボタンを使用したいと思います。私はのStackPanelを使用すると、私は表示された場合

<Grid> 
<Grid.RowDefinitions> 
    <RowDefinition Height="Auto" /> 
    <RowDefinition Height="*" /> 
</Grid.RowDefinitions> 
<TextBlock Text="Photos" Grid.Row="0"/> 
<StackPanel Orientation="Horizontal" Grid.Row="1"> 
    <GridView ItemsSource="{Binding images}"> 
     <GridView.ItemTemplate> 
      <DataTemplate> 
       <Border BorderBrush="Gray" BorderThickness="1" 
         Padding="10" 
         Height="150" Width="190"> 
        <Image Stretch="UniformToFill" 
          Source="{Binding bitmap_image}" /> 
       </Border> 
      </DataTemplate> 
     </GridView.ItemTemplate> 
    </GridView> 
    <Border BorderBrush="Gray" BorderThickness="1" 
      Padding="10" 
      Height="150" Width="190"> 
     <Button Command="{Binding Path=DataContext.AddPhotoCommand, ElementName=DetailsPage}" 
       Height="100" Width="100"> 
      <Viewbox> 
       <SymbolIcon Symbol="Add"/> 
      </Viewbox> 
     </Button> 
    </Border> 
</StackPanel> 
</Grid> 

は、[追加]ボタンは、もはや表示されている。ここでenter image description here

はXAMLです。このとき

は、私は部分的にしか動作し解決策を見つけました3枚の写真...

=>これを行うより良い方法はありますか?あるいは、代替案が見えますか?私はDataTemplateSelectorを介してこれをやって探していますが、それは

+0

私はDataTemplateSelectorに行きます – Bart

答えて

1

私はのStackPanelを使用すると、私は3枚の写真を表示する場合は、[追加]ボタンは、もはや表示されている...

あなたは気にしない場合はボタンがあなたの最後の写真の次の行にあります、あなたは「窓の外に出る絵を避けるために、代わりにStackPanelのS WrapPanelGridView内のボタンを置く」WinRTXamlToolkitを使うのFooterTemplateことができます。

XAML:

<Page 
x:Class="AddButtonSample.MainPage" 
xmlns:controls="using:WinRTXamlToolkit.Controls" 
... 
mc:Ignorable="d"> 

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 
    <TextBlock Text="Photos" Grid.Row="0"/> 
    <controls:WrapPanel Orientation="Horizontal" Grid.Row="1"> 
     <GridView ItemsSource="{Binding images}"> 
      <GridView.FooterTemplate> 
       <DataTemplate> 
        <Button Command="{Binding Path=AddPhotoCommand}" Height="100" Width="100"> 
         <Viewbox> 
          <SymbolIcon Symbol="Add"/> 
         </Viewbox> 
        </Button> 
       </DataTemplate> 
      </GridView.FooterTemplate> 
      <GridView.ItemTemplate> 
       <DataTemplate> 
        <Border BorderBrush="Gray" BorderThickness="1" 
        Padding="10" 
        Height="150" Width="190"> 
         <Image Stretch="UniformToFill" 
         Source="{Binding bitmap_image}" /> 
        </Border> 
       </DataTemplate> 
      </GridView.ItemTemplate> 
     </GridView> 
    </controls:WrapPanel> 
</Grid> 

結果:あなたは本当にGridViewの最後のアイテムの後側でボタン側を入れたい場合は enter image description here

。唯一のオプションはDataTemplateSelectorです。

+0

お返事ありがとうございます! あなたのソリューションを実装しようとしましたが、詳細を表示するために使用するContentPresenterがモデルに直接結合されているため、バインディングの問題が発生します。ボタンをメインのViewModelにバインドする方法は見当たりません。フォームのフィールドは、このViewModelにうまくバインドされます。 この点に関する新しいトピックを作成します: http://stackoverflow.com/questions/39835301/uwp-how-to-bind-a-contentpresenters-element-to-the-main-viewmodel –

0

最善の解決策はCommandBarを使用するのが良いかもしれない...私は追加ボタンを表示するための「偽」オブジェクトを作成するために必要と入れるでしょう」パネルの一番下にUWPのデザインガイドラインと一貫性のある「追加」ボタンを追加します。 GridViewにはFooterTemplateもあります。GridViewのフッターにいくつかのXAMLを追加することができます(アイテムの直後ではありません)。

まだアイテムをGridViewのコンテンツの一部として追加する場合は、実際には偽のアイテムとDataTemplateSelectorを使用する必要があります。このソリューションはあまりクリーンではありませんが、おそらく唯一の簡単な方法です。

+0

CommandBarのパネルの下部にある[追加]ボタンの意味について理解していません。リンクまたはサンプルがありますか? 私は次回のミーティングでクライアントに3つの可能性をあげていきます。 –

+0

'GridView'は基本的にサブサブコンポーネントなので、' CommandBar'ソリューションはおそらく良い選択ではありません。しかし、「FooterTemplate」はまだ実行可能です。また、 'GridView'の' HeaderTemplate'にAddボタンを配置することもできます –

関連する問題