【问题标题】:WPF: Textbox scrollbar has no thumbWPF:文本框滚动条没有拇指
【发布时间】:2010-09-07 13:42:00
【问题描述】:

我的文本框是窗口上的唯一控件,它是更大应用程序的一部分。文本框包含一定数量的文本,大到足以显示垂直滚动条。出现滚动条,但没有拇指:

我仍然可以滚动内容,无论是使用鼠标滚轮还是通过反复单击箭头按钮。 当我创建一个具有相同窗口和文本框的新项目时,滚动条可以正常工作。 WrapPanel 也是如此。你有什么想法会破坏我现有的项目并导致这个问题吗?在 generic.xaml 中,我发现一些样式覆盖了滚动条和滚动查看器的默认设置,但即使完全清除 generic.xaml 也无济于事。

提前致谢!

编辑:对,代码。它只是 XAML(没有 c# 支持代码)。

<Window x:Class="TextBoxTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" MaxHeight="200" MaxWidth="200">
<TextBox x:Name="textbox" MaxLines="2"  MaxHeight="50" VerticalScrollBarVisibility="Auto" TextWrapping="WrapWithOverflow">
    Useless text..... asdasdasda ssssssssssssss sssssss ssssaokdoka sdojwoandowm nxaofwha398ua ozmca3u0a3j3   a80a9fu 03 u0sf u0s9jf4s 0cuj wuf0j w40 fcjw cujwfj9 c9 u49 wsuc j9w3
    3089w 9f8u4wfv 0sf ufw0u w0fuw0 fwu f0uw 09djcazp zopf h43 wofh FYHFWFH WOWY HWO H wohg fujg 4g fugj 4 g0 4
    4w fw4 f3f g555u45y 55 some more some moresome more some moresome more some moresome more some moresome more some more.
</TextBox>
</Window>

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    答案令人惊讶!

    就在我开始怀疑它可能是 WPF 错误之后,我发现了this forum thread。 问这个问题的人说:“我的应用程序使用了一个来自用 C++ 编写的 DLL 的 directx 渲染器”。我的几乎相同,不同之处在于我的渲染器是用 C# (MDX) 编写并使用 D3DImage 互操作。

    按照上面线程中提到的步骤,我将 DirectX 初始化从 OnInitialize() 移动到主窗口的 Loaded 事件回调,现在滚动条恢复了预期的外观。似乎必须先显示 GUI,在初始化渲染器之前

    所以我想在这种情况下谈论一个错误是合理的。

    【讨论】:

      【解决方案2】:

      这似乎是一个风格问题。从 TextBox 中删除显式样式设置器(检查 XAML 和后面的代码)。如果TextBox 没有显式样式,则搜索隐式样式(通过TargetType="TextBox"TargetType="{x:Type TextBox}" 和/或x:Key="{x:Type TextBox"} 定义)。

      尝试snooping 您的应用程序并检查ScrollViewer 的可视化树。它可能会为您提供一些见解。

      希望这会有所帮助。

      【讨论】:

      • 非常好的实用程序,谢谢!我试图“窥探”两个应用程序(滚动条不工作的应用程序和文本框工作的新项目)。真正有趣的是,在调试“被破坏的”应用程序时,Snoop 窗口中的滚动条也被破坏了。后一种情况没有发生。
      【解决方案3】:

      猜测一下:您的TextBoxStackPanel 内。如果您想要的不仅仅是猜测,您需要提供代码。

      【讨论】:

      • 原来是在 DockPanel 中,所以我认为是问题所在,但我在第一篇文章中插入的简单 XAML 窗口也有同样的缺陷。
      【解决方案4】:

      您可以在创建 D3D 设备期间添加 CreateFlags.FpuPreserve 来解决问题

      例子:

      this.device = new Device(0, DeviceType.Hardware, this.handle,
          CreateFlags.HardwareVertexProcessing |
          CreateFlags.PureDevice |
          CreateFlags.FpuPreserve, this.pparams);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 2012-04-16
        • 2013-08-24
        • 2018-01-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多