2017-11-25 19 views
1

私は、画像のスライド可能なリストであるカスタムコントロールに取り組んでいます。私はこのスライド可能なイメージリストをListViewとして水平方向に実装することに決めました。以下 は(罫線と異なる背景色を使用することが唯一の問題を説明することである)と実装のXAMLです:UWP - UWPリストビューコントロールのListViewItem間のインターリーブを減らすことはできますか?

<Page 
    x:Class="VanillaListView.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="using:VanillaListView" 
    mc:Ignorable="d"> 

    <Page.Resources> 
     <DataTemplate x:Key="ListViewItemTemplate" x:DataType="BitmapImage"> 
      <Border BorderBrush="Red" 
        BorderThickness="1" 
        Padding="0" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center" 
        Background="White"> 
       <Image x:Name="theIcon" 
         Stretch="UniformToFill" 
         Source="{Binding Path=DisplayImage}" 
         HorizontalAlignment="Center" 
         VerticalAlignment="Center"> 
       </Image> 
      </Border> 
     </DataTemplate> 
    </Page.Resources> 
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="6.7*"/> 
      <RowDefinition Height="10*"/> 
      <RowDefinition Height="80*"/> 
     </Grid.RowDefinitions> 


     <ListView x:Name="theListView" 
      ItemsSource="{Binding MyImageList}" 
      Grid.Row="0" 
      ItemTemplate="{StaticResource ListViewItemTemplate}" 
      ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
      ScrollViewer.HorizontalScrollMode="Enabled" 
      ScrollViewer.VerticalScrollBarVisibility="Hidden" 
      ScrollViewer.VerticalScrollMode="Disabled"> 

      <ListView.DataContext> 
       <local:MyViewModel/> 
      </ListView.DataContext> 

      <ListView.ItemsPanel> 
       <ItemsPanelTemplate> 
        <ItemsStackPanel Orientation="Horizontal" 
           HorizontalAlignment="Stretch" 
           VerticalAlignment="Stretch"/> 
       </ItemsPanelTemplate> 
      </ListView.ItemsPanel> 

      <ListView.ItemContainerStyle> 
       <Style TargetType="ListViewItem"> 
        <Setter Property="Padding" Value="0"/> 
        <Setter Property="Margin" Value="0"/> 
        <Setter Property="HorizontalAlignment" Value="Center"/> 
        <Setter Property="VerticalAlignment" Value="Top"/> 
        <Setter Property="HorizontalContentAlignment" Value="Center"/> 
        <Setter Property="VerticalContentAlignment" Value="Stretch"/> 
        <Setter Property="BorderBrush" Value="Black"/> 
        <Setter Property="BorderThickness" Value="1"/> 
        <Setter Property="Background" Value="LightBlue"/> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="ListViewItem"> 
           <ListViewItemPresenter HorizontalAlignment="Center" 
            HorizontalContentAlignment="Center" 
            ListViewItemPresenterHorizontalContentAlignment="Center" 
            ListViewItemPresenterPadding="0" 
            Margin="0" 
            BorderThickness="1" BorderBrush="Black" 
            ListViewItemPresenterVerticalContentAlignment="Top" 
            Background="LightBlue"/> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </ListView.ItemContainerStyle> 
     </ListView> 
    </Grid> 
</Page> 

XAMLは、(私は達成するために望んでそれを注釈されている次の出力を生成すること):

Issue

質問:それはアイコンの間インターリーブを低減することができるように、個々のリストビューアイテムがレンダリングされている範囲内のボックスの幅を小さくすることは可能ですか?理想的には、インターリーブをユーザー指定の幅で制御できるようにすることをお勧めします(その場合は、これをUserControlとして実装することになります)。 インターリーブを減らす方法がない場合、同じ結果を達成するための代替手段は何ですか?私はすでにContentMarginとMarginを非常に限られた成功で試してみて、それが私の問題を解決しないことを発見しました。 ご協力いただきありがとうございます!

+0

今は適切な回答をすることができませんが、実際にはアイコンの高さが実際に幅であると考えられているようです。私の推測では、自動生成されたListView Itemコンテナは水平方向を考慮していないということです。 ItemsStackPanelのHとVのアライメントで、ストレッチからセンターに変更するとどうなりますか? ListViewItemの幅を手動で設定するとどうなりますか?否定的な埋め込みや余白は何をしますか?これらは私が試してみたいものです。 –

+2

UWP Toolkitには、水平方向のListViewを作成する代わりに、好きなようなCarouselコントロールがあります。 –

+0

ありがとう、ショーン!私はカルーセルコントロールを認識しておらず、間違いなくそれを調べます。 – AutomationZombie

答えて

1

あなたはListViewItemMinWidthプロパティのデフォルト値を変更する必要があります。

<ListView x:Name="theListView" ...> 
     ... 
     <ListView.ItemContainerStyle> 
      <Style TargetType="ListViewItem"> 
       ... 
       <Setter Property="MinWidth" Value="0"/> 
       ... 
      </Style> 
     </ListView.ItemContainerStyle> 
    </ListView> 

しかし、私はUWP Community ToolkitからCarousel XAML Controlがあなたの仕事のためのより良いフィットするように思われることショーン・オニールに反対することはできません。あなたはこの公式UWP Toolkit demo appでそれを見ることができます。

+0

ありがとう、A. Milto!これは今のところ私の問題を解決しましたが、Seanとあなたからの推奨に基づいて、私はCarouselコントロールを検討します。それはまさに私が必要としているようです。 – AutomationZombie

+0

@AutomationZombie私の喜び! –

関連する問題