2014-04-02 56 views
0

我有一個項目控件綁定到一個可觀察的視頻集合。我添加了一個垂直滾動條,但在頁面加載後消失。ScrollViewer在WPF中自動消失

<ItemsControl x:Name="_imageList" ScrollViewer.CanContentScroll="True" HorizontalAlignment="Right" Margin="-1,0" Width="460" > 
    <ItemsControl.Template> 
     <ControlTemplate> 
      <ScrollViewer x:Name="ScrollViewer" Padding="{TemplateBinding Padding}" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto"> 
       <ItemsPresenter /> 
      </ScrollViewer> 
     </ControlTemplate> 
    </ItemsControl.Template> 
    <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <UniformGrid Columns="4" Rows="3"/> 
        <!--<StackPanel Orientation="Horizontal"/>--> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
       <Button Click="btn_Clicked" Margin="9,9,9,9" BorderThickness="0" Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"> 
       <Image x:Name="image" Source="{Binding thumbnail}" ClipToBounds="True"/> 
      </Button> 
     </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 

這是我的代碼頁的背後:

public void Images() 
    { 
     var images = new ObservableCollection<Video>(); 
     var wcf = new ServiceReferenceVideo.VideoServiceClient(); 
     link_thumb = new Dictionary<string, string>(); 
     foreach (var item in wcf.GetAllVideos()) 
     { 
      images.Add(item); 
     } 
     _imageList.ItemsSource = images; 
    } 
+0

我可能是想念它,但我沒有看到你爲ItemsControl設置了'ItemsSource'。另外,你能描述一下你如何將內容添加到你的'ObservableCollection'?你能描述它顯示的內容以及它沒有顯示哪些內容嗎? – Default

+0

_imageList.ItemsSource = images;在後面的代碼和圖像是一個ObservableCollection

+0

提示:您可以單擊問題下的編輯按鈕,並將其直接添加到您的問題。 – Default

回答

0

這不會工作,因爲您的UniformGrid自動採用的可用大小。儘量設置在固定WidthMinWidth300的按鈕你DataTemplate

這裏是一個工作示例:

XAML:

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" 
    Width="525" 
    Height="350"> 
<Grid> 

    <ItemsControl x:Name="Items"> 
     <ItemsControl.Template> 
      <ControlTemplate TargetType="ItemsControl"> 
       <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
        <ItemsPresenter /> 
       </ScrollViewer> 
      </ControlTemplate> 
     </ItemsControl.Template> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <UniformGrid Columns="4" 
          IsItemsHost="True" 
          Rows="3" /> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Button MinWidth="200" 
         MinHeight="200" 
         Margin="9" 
         Content="{Binding }" /> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</Grid> 
</Window> 

代碼背後:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     this.Items.ItemsSource = new List<int>(Enumerable.Range(0,100)); 
    } 
} 
+0

我無法理解你所做的任何事情...... –

+0

這只是一個關於如何使用簡化數據(數字而不是圖像)製作UniformGrid滾動的示例。把它放到一個標準的WPF應用程序中,你會明白我的意思。您的滾動條消失,因爲UniformGrid獲取所有可用的大小並將其內容擴展到它。所以在你的情況下,沒有必要讓WPF呈現你的ScrollBar。如果將固定寬度/高度或最小寬度/高度放置在圖像上,則內容的所需大小會比可用空間大,因此WPF最後會將滾動查看器添加爲滾動條。 – JanW

+0

好的謝謝,現在它滾動 –

1

嘗試把ScrollViewer中ItemsControl的外面。像...

<ScrollViewer> 
    <ItemsControl> 
    </ItemsControl> 
</ScrollViewer> 
+0

對。 'ScrollViewer'不是一個滾動條。這是一個滾動其內容的控件。 –

+0

但他的ControlTemplate已經有一個包裝ItemsPresenter的ScrollViewer。爲什麼他需要一個itemcontrol之外的東西? – Default

+0

仍然不起作用 –