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

发布于 2024-09-14 10:34:33 字数 648 浏览 11 评论 0 原文

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

这是几乎可以工作的 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>

and thank you for looking into my question. I would like to customize the ScrollBar in my ScrollViewer. No problem. But wait. When I do that, it also changes the ScrollBar of the inner controls. I don't want to impact those ScrollBars. How do I specify the correct scope?

Here's the XAML that almost works:

<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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

白衬杉格子梦 2024-09-21 10:34:33

因为 ScrollViewer 仅支持一个子对象,所以我添加了一个 Grid 来包裹文本框。
就我而言,我应用了覆盖样式使文本框变为蓝色。
如果您从网格中删除整个设置器,您将获得默认设置。

<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> 

Because ScrollViewer supports only one child object I added a Grid to wrap the textbox.
In my case I applied an override style to make the text box blue.
If you remove the entire setter from the Grid you get the default.

<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> 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文