WPF / XAML自定义ScrollViewer ScrollBar没有内部控件中的自定义ScrollBar(如TextBox)

时间:2010-08-10 21:24:25

标签: wpf scrollbar styles scrollviewer

感谢您查看我的问题。我想在我的ScrollViewer中自定义ScrollBar。没问题。可是等等。当我这样做时,它也会更改内部控件的ScrollBar。我不想影响那些ScrollBars。如何指定正确的范围?

这是几乎可行的XAML:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <ScrollViewer>  
    <ScrollViewer.Resources>
      <Style TargetType="{x:Type ScrollBar}">
        <Setter Property="Background" Value="Red" />
      </Style>
    </ScrollViewer.Resources>
    <TextBox Height="200" Width="200" VerticalScrollBarVisibility="Visible" />
  </ScrollViewer>
</Page>

1 个答案:

答案 0 :(得分:2)

因为ScrollViewer只支持一个子对象,所以我添加了一个Grid来包装文本框。 在我的例子中,我应用了覆盖样式使文本框变为蓝色。 如果从Grid中删除整个setter,则会得到默认值。

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid>
        <ScrollViewer>
            <ScrollViewer.Resources>
                <Style TargetType="{x:Type ScrollBar}">
                    <Setter Property="Background" Value="Red" />
                </Style>
            </ScrollViewer.Resources>
            <Grid>
                <Grid.Resources>
                    <Style TargetType="{x:Type ScrollBar}">
                        <!-- remove setter to get default -->
                        <Setter Property="Background" Value="Blue" />
                    </Style>
                </Grid.Resources>
                <TextBox Height="200" Width="200" VerticalScrollBarVisibility="Visible" />
            </Grid>    
        </ScrollViewer>
    </Grid>
</Page>