2010-09-07 2 views
1

Мое текстовое поле является единственным элементом управления в окне, которое является частью большего приложения. Текстовое поле содержит определенное количество текста, достаточно большое, чтобы показывать вертикальную полосу прокрутки. Появится полоса прокрутки, но без большого пальца:WPF: панель прокрутки текстового поля не имеет большого пальца.

alt text

Я все еще могу прокручивать содержимое, либо с помощью колесика мыши или нажав на кнопки со стрелками, несколько раз. Когда я создаю новый проект с тем же окном и текстовым полем, полоса прокрутки работает так, как должна. То же самое происходит с WrapPanel. У вас есть идеи, что может испортить мой существующий проект и вызвать эту проблему? В generic.xaml я нашел некоторые стили, переопределяющие значения по умолчанию для полосы прокрутки и scrollviewer, но даже полная очистка generic.xaml не помогла.

Заранее благодарен!

EDIT: правый, код. Это только 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> 
+1

Показать свой код XAML –

ответ

2

Ответ поражает!

Сразу после того, как я начал подозревать, что это может быть ошибка WPF, я нашел this forum thread. Парень, который задал вопрос, говорит: «В моем приложении используется обработчик directx из библиотеки DLL, написанной на C++». Mine делает почти то же самое с той разницей, что мой рендерер написан на C# (MDX) и использует D3DImage interop.

Следующие шаги, упомянутые в потоке выше, я перенесли инициализацию DirectX из OnInitialize() в обратный вызов загруженного события в главном окне, и теперь полосы прокрутки восстановили ожидаемый внешний вид. Кажется, что GUI должен отображаться первым, перед инициализацией рендеринга.

Поэтому я думаю, что разумно говорить об ошибке в этом случае.

0

В догадке: Ваш TextBox находится внутри StackPanel. Если вы хотите больше, чем предполагать, вам нужно предоставить код.

+0

Первоначально он был в DockPanel, так что я поверил была проблема, но простое окно XAML, которое я вставил в свой первый пост, имеет тот же недостаток. – pbalaga

1

Кажется, проблема стиля. Удалите явный установщик стиля из TextBox (проверьте как XAML, так и код). Если TextBox не имеет явного стиля, поиск неявных стилей (определяется через TargetType="TextBox" или TargetType="{x:Type TextBox}" и/или x:Key="{x:Type TextBox"}).

Попробуйте snooping ваше приложение и проверьте визуальное дерево ScrollViewer. Это может дать вам некоторое представление о том, где искать.

Надеюсь, это поможет.

+0

Очень хорошая утилита, спасибо! Я попытался «скрыть» оба приложения (приложение с неработающей полосой прокрутки и новым проектом, где работает текстовое поле).На самом деле интересно, что полосы прокрутки в окне Snoop также были испорчены при отладке «испорченного» приложения. Это не произошло в последнем случае. – pbalaga

0

Вы можете решить эту проблему, добавив CreateFlags.FpuPreserve при создании вашего D3D Device

Пример:

this.device = new Device(0, DeviceType.Hardware, this.handle, 
    CreateFlags.HardwareVertexProcessing | 
    CreateFlags.PureDevice | 
    CreateFlags.FpuPreserve, this.pparams); 
Смежные вопросы