2017-01-28 6 views
1

グリッドレイアウトのサイズ変更に問題があります。 enter image description hereグリッドのリストボックスがSplitViewでサイズ変更されない

このページでは3列にリストボックスがあります。 これはmanページです。しかし、データをListBoxに入力すると、ボタンとスクロールバーが表示されません。私はScrollViewerでScrollBarを持っていますが、動作しません。 Forループ(100項目)ですべての値を生成します。このページの私のコードです

enter image description here

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

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" 
     VerticalAlignment="Stretch"> 

    <Grid.RowDefinitions> 
     <RowDefinition Height="4*"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

    <Grid Grid.Row="0" x:Name="LayoutRoot"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width=".5*"/> 
     </Grid.ColumnDefinitions> 

     <TextBlock Grid.Column="0" 
         Name="WordBeforeTranslation" 
         HorizontalAlignment="Center" 
         VerticalAlignment="Center" 
         FontSize="20"/> 

     <StackPanel Grid.Column="1" > 
      <TextBlock Name="WordAfterTranslation" 
         HorizontalAlignment="Center" 
         VerticalAlignment="Center" 
         FontSize="20"/> 
      <TextBlock Name="WordArticulation" 
         HorizontalAlignment="Center" 
         VerticalAlignment="Center" 
         FontSize="20"/> 
     </StackPanel> 

     <ScrollViewer Grid.Column="2"> 
      <ListBox Name="AllWords"/> 
     </ScrollViewer> 

    </Grid> 

    <Grid Grid.Row="1"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 

     <Button Grid.Column="0" 
        Content="Previous" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center"/> 

     <Button Grid.Column="1" 
        Content="Check" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center"/> 

     <Button Grid.Column="2" 
        Content="Next" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center"/> 
    </Grid> 

    <Grid Grid.Row="2"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 

     <Button Grid.Column="0" 
       Name="BtnLoadFile" 
       Click="BtnLoadFile_Click" 
       HorizontalAlignment="Center" 
       VerticalAlignment="Center" 
       Content="Load file"/> 
     <Button Grid.Column="1" 
       HorizontalAlignment="Center" 
       VerticalAlignment="Center" 
       Content="New Random"/> 
     <Button Grid.Column="2" 
       HorizontalAlignment="Center" 
       VerticalAlignment="Center" 
       Content="--------"/> 
    </Grid> 
</Grid> 
</Page> 

次の場合:今、私はこのような何かを持っているために、私は起動に設定するにはどうすればよい 、私のグリッドはせずにページのすべてのコンテンツを満たしListBoxにデータをロードしましたか?コンテンツを失うことなくアプリのサイズを変更できますか?私は高さと幅に永久的な値を設定したくありません。私は永続的な値のないレイアウトしか持たないことを望みます。一般的に、私はアプリケーションを再スケーリングするとき、グリッドは同様のレイアウトを持つことになります。

私のページを最初のスクリーンショットのように見せたいと思います。 可能ですか?

EDIT:

これは、メインページからの私のコードです:

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

<StackPanel> 
    <CommandBar HorizontalAlignment="Left"> 
     <AppBarButton Label="Menu" Click="ToogleMenu_Click"> 
      <AppBarButton.Icon> 
       <FontIcon FontFamily="Segoe MDL2 Assets" Glyph="&#xE700;"/> 
      </AppBarButton.Icon> 
     </AppBarButton> 
     <AppBarButton Icon="Back" Label="Back" Click="GoBack_Click"/> 
     <AppBarButton Icon="Home" Label="Play" Click="GoHome_Click"/> 
    </CommandBar> 
    <!--<Button Content="Open" Click="Button_Click"/>--> 
    <SplitView Name="MySplitView" 
       DisplayMode="CompactOverlay" 
       CompactPaneLength="50" 
       OpenPaneLength="200"> 
     <SplitView.Pane > 
      <StackPanel> 
       <ListBox SelectionMode="Single" 
         Name="ListOfMenu" 
         SelectionChanged="ListOfMenu_SelectionChanged"> 
        <ListBoxItem Name="LearnWordsItem"> 
         <StackPanel Orientation="Horizontal"> 
          <TextBlock FontFamily="Segoe MDL2 Assets" 
             Text="&#xE12B;" 
             FontSize="30" 
             MinWidth="50"/> 
          <TextBlock Text="Nauka słówek"/> 
         </StackPanel> 
        </ListBoxItem> 

        <ListBoxItem Name="SettingItem"> 
         <StackPanel Orientation="Horizontal"> 
          <TextBlock FontFamily="Segoe MDL2 Assets" 
             Text="&#xE115;" 
             FontSize="30" 
             MinWidth="50"/> 
          <TextBlock Text="Ustawienia"/> 
         </StackPanel> 
        </ListBoxItem> 

       </ListBox> 


      </StackPanel> 

     </SplitView.Pane> 

     <SplitView.Content> 
      <StackPanel> 

       <Frame Name="MyFrame"> 

       </Frame> 

      </StackPanel> 
     </SplitView.Content> 
    </SplitView> 
</StackPanel> 
</Page> 
+1

これはコード全体ですか、それともコードの中に何かがありますか?また、あなたはメニュー/ハンバーガーを持っているようです。空のページにコードをコピーしてコピーすると、デスクトップ上で正常に動作するようです。ところで、なぜそれは既に独自の持っているときに、scrollviewerでリストボックスをラップする? – Romasz

+0

コード全体ではなく、コードのコードだけを示しました。 MainViewではSplitViewと私のページをFrameにロードしました。 ListBoxをScrollViewerにラップする理由ListBoxのスクロールバーも機能しませんでした。 – Kiro

+0

あなたの質問から空のページにコードを貼り付けることができますか?クリックイベントでのみ 'AllWords.ItemsSource = items;'はダミー文字列です。私はあなたのコードのいくつかの他の部分が混乱を招くかもしれないと思います。 * ListBox *の代わりに* ListView *を使うことも考えられます。 – Romasz

答えて

0

[OK]を、私は私の質問に答えを見つけました。 :) Yeeee :) 私の間違いはメインページで私はグリッドにすべて含まれていなかったということでした。

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 

    <CommandBar Grid.Row="0" HorizontalAlignment="Left"> 
     <AppBarButton Label="Menu" Click="ToogleMenu_Click"> 
      <AppBarButton.Icon> 
       <FontIcon FontFamily="Segoe MDL2 Assets" Glyph="&#xE700;"/> 
      </AppBarButton.Icon> 
     </AppBarButton> 
     <AppBarButton Icon="Back" Label="Back" Click="GoBack_Click"/> 
     <AppBarButton Icon="Home" Label="Play" Click="GoHome_Click"/> 
    </CommandBar> 
    <SplitView Grid.Row="1" Name="MySplitView" 
       DisplayMode="CompactOverlay" 
       CompactPaneLength="50" 
       OpenPaneLength="200" 
       VerticalAlignment="Stretch"> 
     <SplitView.Pane > 
      <StackPanel> 
       <ListBox SelectionMode="Single" 
         Name="ListOfMenu" 
         SelectionChanged="ListOfMenu_SelectionChanged"> 
        <ListBoxItem Name="LearnWordsItem"> 
         <StackPanel Orientation="Horizontal"> 
          <TextBlock FontFamily="Segoe MDL2 Assets" 
             Text="&#xE12B;" 
             FontSize="30" 
             MinWidth="50"/> 
          <TextBlock Text="Nauka słówek"/> 
         </StackPanel> 
        </ListBoxItem> 

        <ListBoxItem Name="SettingItem"> 
         <StackPanel Orientation="Horizontal"> 
          <TextBlock FontFamily="Segoe MDL2 Assets" 
             Text="&#xE115;" 
             FontSize="30" 
             MinWidth="50"/> 
          <TextBlock Text="Ustawienia"/> 
         </StackPanel> 
        </ListBoxItem> 

       </ListBox> 
      </StackPanel> 
     </SplitView.Pane> 

     <SplitView.Content> 
      <Frame Name="MyFrame" > 

      </Frame> 
     </SplitView.Content> 
    </SplitView> 

</Grid> 

グリッドでStackPanelを変更するには十分です。それだけです。

0

私はあなたが "*" として3 RowDefinitionを設定して、それは確かにこれらのボタンを追い出すだろうことがわかりました。これらのボタンを常に表示させたい場合は、2行の固定高さを設定する必要があります。次のコードを参照してください:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" 
    VerticalAlignment="Stretch"> 

    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="100" /> 
     <RowDefinition Height="100" /> 
    </Grid.RowDefinitions> 

    <Grid Grid.Row="0" x:Name="LayoutRoot"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width=".5*" /> 
     </Grid.ColumnDefinitions> 

     <TextBlock Grid.Column="0" 
        Name="WordBeforeTranslation" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center" 
        FontSize="20" /> 

     <StackPanel Grid.Column="1"> 
      <TextBlock Name="WordAfterTranslation" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center" 
        FontSize="20" /> 
      <TextBlock Name="WordArticulation" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center" 
        FontSize="20" /> 
     </StackPanel> 

     <ScrollViewer Grid.Column="2"> 
      <ListBox Name="AllWords" /> 
     </ScrollViewer> 
    </Grid> 

    <Grid Grid.Row="1"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 

     <Button Grid.Column="0" 
       Content="Previous" 
       HorizontalAlignment="Center" 
       VerticalAlignment="Center" /> 

     <Button Grid.Column="1" 
       Content="Check" 
       HorizontalAlignment="Center" 
       VerticalAlignment="Center" /> 

     <Button Grid.Column="2" 
       Content="Next" 
       HorizontalAlignment="Center" 
       VerticalAlignment="Center" /> 
    </Grid> 

    <Grid Grid.Row="2"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 

     <Button Grid.Column="0" 
      Name="BtnLoadFile" 

      HorizontalAlignment="Center" 
      VerticalAlignment="Center" 
      Content="Load file" /> 
     <Button Grid.Column="1" 
      HorizontalAlignment="Center" 
      VerticalAlignment="Center" 
      Content="New Random" /> 
     <Button Grid.Column="2" 
      HorizontalAlignment="Center" 
      VerticalAlignment="Center" 
      Content="--------" /> 
    </Grid> 
</Grid> 

enter image description here

+0

はい、動作していますが、おそらくあなたはメインページにグリッドを配置します。私のグリッドは別のページにあり、メインページにあるSplitViewにあるフレームにグリッド付きのページを読み込みます。そしてこの組み合わせはうまくいかなかった。 – Kiro

+0

最後のコードを見てください。私はメインページのコードを示しました。 – Kiro

関連する問題