带有更宽滚动条的WPF列表框

时间:2015-02-18 11:18:55

标签: c# wpf custom-controls

我是WPF的新手,我需要你的帮助来创建一个wpf自定义ListBox,其滚动条宽于默认值。

我找到了一个适用于Window WPF的解决方案,包括ListBox:

<Window x:Class="iFixCustomControlsTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:cc="clr-namespace:iFixCustomControls;assembly=iFixCustomControls"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ListBox HorizontalAlignment="Left" Height="92" Margin="56,88,0,0" VerticalAlignment="Top" Width="357" ScrollViewer.VerticalScrollBarVisibility="Visible"/>
    </Grid>

    <Window.Resources>
        <Style TargetType="ScrollBar">
            <Setter Property="Width" Value="100"/>
        </Style>        
    </Window.Resources>
</Window>

这个解决方案不是我最喜欢的解决方案,因为它意味着在包含“经典”列表框的Window中编写代码。我需要的是在Generic.xaml中修改Listbox中的滚动条(如果我理解的话):

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:iFixCustomControls">
    <Style TargetType="local:iFixCustomListBox" BasedOn="{StaticResource {x:Type ListBox}}">
        <!--  
              Setting scrollbar wider than default
              Something like:
              <Style TargetType="ScrollBar">
                  <Setter Property="Width" Value="100"/>
              </Style>
        -->
    </Style>
</ResourceDictionary>

.cs文件是:

public class iFixCustomListBox : ListBox
{
    static iFixCustomListBox()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(iFixCustomListBox), new FrameworkPropertyMetadata(typeof(iFixCustomListBox)));
    }
}

这种方法是正确的还是更好的方法应该是用户控制而不是自定义控件?

2 个答案:

答案 0 :(得分:4)

如果我理解正确,您有一个源自ListBox的自定义控件类型,并且您希望该控件的每个实例都有一个更宽的垂直滚动条。

如果是这样,您可以使用自定义样式进行控制(您可能已经使用过),并将<{1}}样式添加到 样式的{{1收集:

ScrollBar

我尝试将此样式置于(a)窗口的资源集合中,以及(b)应用程序,并且在两种情况下都可以正常工作,因此我认为如果放在Resources中它也可以工作

答案 1 :(得分:0)

这个怎么样?

<ScrollViewer Width="100">
      <ListBox ...>
</ScrollViewer>