おはようの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と間違って何かをすることができると信じて:
- 周囲のXAMLを変更せずに、単にのItemsControlにItemsControl.Itemsを追加すると、手動で予想されるスクロールバーの挙動 することができます
- ItemsPanelTemplate StackPanelの高さを設定すると、バインド可能なコレクションが領域にデータを入力してウィンドウをオーバーフローするまでスクロールバーの動作が期待されます(機能するスクロールバーがドラッグ可能なバーなしで置き換えられる)。
アイテムが画面をオーバーランすると、別のスクロールバーが表示されるようですが、周囲のScrollViewerを削除すると、画面がオーバーランするとスクロールバーが表示されなくなります。
次はどこへ行くのか混乱の種ですが、どんな入力をいただければ幸いです。
ありがとうございます!
カリバーンない最初のテストあなたのコードを完全 – AnjumSKhan
(いくつかの詳細を)上述したように、プログラムで追加されたのviewmodelsが代わりにハードコードされている場合ItemsControlに追加します。アイテムは、予想される動作は、スクロールバーで展示されて すなわち <ビュー:ListItemView /> .... <ビュー:ListItemView /> 'ScrollViewerのを追加 –
mdlss
してみてください。あなたの 'StackPanel'を持っているので、CanContentScroll =" True "をあなたの' ItemsPanelTemplate'に返します。 –