2017-08-21 14 views
1

をスクロールされていないのStackPanelを持ってScrollViewerのI持っている特定のイベントが発生するたびにユーザーコントロール要素を示してScrollViewerの内部に次のStackPanel:XAML/WPF - 内部

注:多くのユーザーコントロールだのStackPanelに表示される場合がありますStackPanelのはまだ範囲外で起こっているとスクロールバーが表示されていないと動作しません、が、なぜ私はScrollViewerの

<ScrollViewer 
     VerticalScrollBarVisibility="Auto" 
     Grid.Row="2" 
     CanContentScroll="True" 
     Grid.ColumnSpan="2"> 

     <StackPanel Orientation="Vertical"> 
      <ItemsControl ItemsSource="{Binding UserControls}"> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <views:UserControl/> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 
     </StackPanel> 
</ScrollViewer> 

を追加しました!

... ScrollViewerのを含む

ウィンドウのレイアウトを私はのStackPanelとのItemsControlの両方の高さを固定しようとしたが、それはどちらか動作するようですdoes't:

<Grid Margin="0,15,0,0"> 

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

    <Label 
     Content="This is a Label" 
     HorizontalAlignment="Left" 
     VerticalAlignment="Top" 
     Margin="5,5,0,0" 
     FontSize="15" 
     Grid.Row="0" Grid.ColumnSpan="2"> 
    </Label> 


    <StackPanel Grid.Row="1" Orientation="Horizontal" Grid.ColumnSpan="2"> 
     <ComboBox 
      ItemsSource="{Binding Something}" 
      Text="Confirm with..." 
      SelectedItem="{Binding Something}"/> 
     <Button 
      HorizontalAlignment="Left" 
      Margin="5" 
      Content="Add new UserControl" 
      Command="{Binding Path=AddUserControl}"/> 

    </StackPanel> 

    <ScrollViewer 
     VerticalScrollBarVisibility="Auto" 
     Grid.Row="2" 
     CanContentScroll="True" 
     HorizontalScrollBarVisibility="Auto"> 
     <StackPanel Orientation="Vertical"> 
      <ItemsControl ItemsSource="{Binding UserControls}" Height="300"> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <views:UserControl/> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 
     </StackPanel> 
    </ScrollViewer> 

</Grid> 

ここに私ですStackPanelに追加されたUserControl ScrollViewerの内部:

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

    <StackPanel 
     Orientation="Horizontal" 
     Grid.Row="0"> 

     <Button 
      Name="DeleteFilter" 
      HorizontalAlignment="Left" 
      Margin="5" 
      Content="-"/> 

     <ComboBox 
      Margin="5" 
      IsEditable="False" 
      IsReadOnly="True" 
      Width="150" 
      ItemsSource="{Binding SomeObject}" 
      DisplayMemberPath="Name" 
      SelectedItem="{Binding SomeObjectProperty}"/> 

     <ComboBox 
      Margin="5" 
      IsEditable="False" 
      IsReadOnly="True" 
      Width="150" 
      ItemsSource="{Binding AnotherObject}" 
      DisplayMemberPath="Name" 
      SelectedItem="{Binding AnotherObjectProperty}"/> 

     <TextBox 
      x:Name="Value" 
      Text="{Binding TextBoxValueString}" 
      TextAlignment="Center" 
      Width="100" 
      Margin="5" 
      Visibility="{Binding TextBoxVisibility}"/> 

    </StackPanel> 

</Grid> 

XAMLとWPFが初めてです。

どのような提案ですか?

+0

をあなたが参照して全体のレイアウトコードを表示してくださいすることができスクロールビューアの親とそのプロパティはどのように設定されていますか? –

+0

あなたのコードは私のマシンで正常に動作していますが、アプリケーションのどこかでScroll Viewerのスタイルを上書きしていますか? –

+0

それは変です。いいえ、そうではありません。私はそれを上書きしていません。 –

答えて

1

ScrollViewersStackPanelはうまく機能しません。これは、OrientationプロパティがHorizontalに設定され、Verticalに設定されている場合、無限の垂直スペースが設定されている場合、StackPanelは無限の水平スペースを持つ子要素を測定するためです。詳細については、ここに私の答えを参照してください:

How to scroll the datagrid in stackpanel?

ですから、別のPanelStackPanelを交換する必要があるか、それを完全に削除します。

<ScrollViewer 
     VerticalScrollBarVisibility="Auto" 
     Grid.Row="2" 
     CanContentScroll="True" 
     HorizontalScrollBarVisibility="Auto"> 
     <ItemsControl ItemsSource="{Binding UserControls}" Height="300"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <views:UserControl/> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
</ScrollViewer> 
+0

親愛なる@ mm8、これは私がstackoverflowの質問に答える2回目です。たくさん。完璧に動作します! –

+1

私はしましたが、私は評判が10にすぎませんでした。投票できるようにするには5が必要でした。あなたが私の質問に投票して以来、私は今それを行うことができます:) –

-1

StackPanelまたはItemsControl(Your choise)の背景がありません。 デフォルトの背景がヌルです。 バックグラウンドがNULLの場合、ScrollViewerはマウスホイールのマウスイベントである を取得せず、スクロールしません。

+0

あなたは次のような意味ですか: 背景= "LightGray" ...もしそうなら、それは動作しませんでした。パネルはまだウィンドウの範囲から外れます –

+0

バックグラウンドはスクロールビューアの可視性とは関係ありません –