2016-08-04 3 views
1

おはようのstackoverflowによって移入、ItemsControlにスクロールバー非機能BindableCollection

私は現在、私のItemsControlを囲むスクロールバーで問題が発生しています。 ItemsControlのコンテンツ(BindableCollectionにバインドされ、ListItemViewModelのインスタンスで埋められている)がウィンドウの境界をオーバーフローすると、スクロールバーが表示されますが、無効になります(中央にはドラッグ可能なバーはありません)。したがって、私は拡張された内容をスクロールすることができません。ウィンドウを展開すると、以下の内容が表示されます。 CanContentScrollをtrueとfalseに設定しようとしましたが、どちらもうまくいきませんでした。ここ

は私のベースビューである:

<Controls:MetroWindow x:Class="DataIntegrator.Views.BaseView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
     xmlns:cal="http://www.caliburnproject.org" 
     xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" 
     xmlns:cefSharp="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"> 
<Grid AllowDrop="True" cal:Message.Attach="[Event Drop] = [Action AddItems($eventArgs)]" Height="Auto" Width="Auto" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="14*"/> 
     <ColumnDefinition Width="5*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="28"/> 
    </Grid.RowDefinitions> 
    <ScrollViewer Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" VerticalAlignment="Stretch"> 
     <ItemsControl HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding List}"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <ContentControl cal:View.Model="{Binding}"/> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <StackPanel/> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
     </ItemsControl> 
    </ScrollViewer> 
    <Button x:Name="Reprocess" Content="Reprocess Selected Elements" Grid.RowSpan="1" Grid.Row="1" Grid.ColumnSpan="1" Grid.Column="1"/> 
</Grid> 

のItemsControlに追加されるアイテムのビュー:

<UserControl x:Class="DataIntegrator.Views.ListItemView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local="clr-namespace:DataIntegrator.Views" 
     xmlns:cal="http://www.caliburnproject.org" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 
<Grid Height="20" HorizontalAlignment="Stretch"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="4*"/> 
     <ColumnDefinition Width="1"/> 
     <ColumnDefinition/> 
     <ColumnDefinition Width="1"/> 
     <ColumnDefinition Width="30"/> 
    </Grid.ColumnDefinitions> 

    <TextBlock x:Name="File" Grid.ColumnSpan="1" Padding="3" Grid.Column="0" Background="#FF5A5A5A" Foreground="Cyan" ></TextBlock> 
    <TextBlock x:Name="Type" Grid.ColumnSpan="1" Padding="3" Grid.Column="2" Foreground="Cyan" Background="#FF5A5A5A"></TextBlock> 
    <Rectangle Grid.Column="4" Fill="#FF5A5A5A" ></Rectangle> 
    <CheckBox x:Name="Reprocess" HorizontalAlignment="Center" VerticalAlignment="Center" Height="18" Width="18" Grid.Column="4" IsChecked="{ Binding Path=Reprocess, Mode=TwoWay }"/> 
</Grid> 

とリスト項目を追加コード:

public void AddToList(string filePath) 
    { 
     List.Add(new ListItemViewModel(_eventAggregator){File=filePath}); 
     NotifyOfPropertyChange(() => List); 
    } 

ここで、変数Listは既に宣言され、BindableCollectionとしてインスタンス化されています。

が、私は次のことが成り立つように私はcaliburn.microと間違って何かをすることができると信じて:

  1. 周囲のXAMLを変更せずに、単にのItemsControlにItemsControl.Itemsを追加すると、手動で予想されるスクロールバーの挙動
  2. することができます
  3. ItemsPanelTemplate StackPanelの高さを設定すると、バインド可能なコレクションが領域にデータを入力してウィンドウをオーバーフローするまでスクロールバーの動作が期待されます(機能するスクロールバーがドラッグ可能なバーなしで置き換えられる)。

アイテムが画面をオーバーランすると、別のスクロールバーが表示されるようですが、周囲のScrollViewerを削除すると、画面がオーバーランするとスクロールバーが表示されなくなります。

次はどこへ行くのか混乱の種ですが、どんな入力をいただければ幸いです。

ありがとうございます!

+0

カリバーンない最初のテストあなたのコードを完全 – AnjumSKhan

+0

(いくつかの詳細を)上述したように、プログラムで追加されたのviewmodelsが代わりにハードコードされている場合ItemsControlに追加します。アイテムは、予想される動作は、スクロールバーで展示されて すなわち <ビュー:ListItemView /> .... <ビュー:ListItemView /> 'ScrollViewerのを追加 – mdlss

+0

してみてください。あなたの 'StackPanel'を持っているので、CanContentScroll =" True "をあなたの' ItemsPanelTemplate'に返します。 –

答えて

1

だから私は、XAML以下でそれをテストしている明確にすることがControlTemplate

<ItemsControl > 
    <ItemsControl.Template> 
    <ControlTemplate> 
     <ScrollViewer VerticalScrollBarVisibility="Auto"> 
      <ItemsPresenter /> 
     </ScrollViewer> 
    </ControlTemplate> 
    </ItemsControl.Template> 
</ItemsControl> 

にScrollViwerを追加し、私はスクロールビューアとスクロールを表示することができますよう、それは私のために正常に動作します。

ビュー

<Grid Height="200"> 
    <ItemsControl Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding List}"> 
     <ItemsControl.Template> 
      <ControlTemplate> 
       <ScrollViewer VerticalScrollBarVisibility="Visible"> 
        <ItemsPresenter /> 
       </ScrollViewer> 
      </ControlTemplate> 
     </ItemsControl.Template> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="MynewTest"/> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel ScrollViewer.CanContentScroll="True"/> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
    </ItemsControl> 
</Grid> 

のViewModel

public class ViewModel 
{ 
    public ViewModel() 
    { 
     List = new ObservableCollection<string>() { "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }; 
    } 
    private ObservableCollection<string> _MyProperty; 
    public ObservableCollection<string> List 
    { 
     get { return _MyProperty; } 
     set { _MyProperty = value; } 
    } 
} 
+0

私はそれらの両方を試しましたが、残念なことにどちらも機能しませんでした。 – mdlss

+0

[これをチェック](http://stackoverflow.com/q/2028459/2470362) –

+0

私は無駄にそのリンクで提案を試みた。私はscrollviewerを全部動かし、XAML側で考えることができるすべてのプロパティを試しました。これがCaliburnのデータバインディングと関係していると考えている理由です(プログラマチックにそれらの) – mdlss

関連する問題