ScrollViewer在WPF中自动消失

时间:2014-04-02 11:28:20

标签: c# 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;
    }

2 个答案:

答案 0 :(得分:1)

尝试将Scrollviewer放在ItemsControl之外。有点像...

<ScrollViewer>
    <ItemsControl>
    </ItemsControl>
</ScrollViewer>

答案 1 :(得分:0)

这不会起作用,因为UniformGrid会自动采用可用尺寸。尝试为Width

中的按钮设置固定的MinWidth300,例如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));
    }
}