#wpf #grid #devexpress #gridcontrol
#wpf #сетка #devexpress #gridcontrol
Вопрос:
У меня относительно сложный макет. Он состоит из: Сетки с одним столбцом и тремя строками. В первой строке (включение вызывает у меня проблемы) У меня есть компонент developer express componenet — другой GridControl.
Моя проблема в том, что, хотя высота этой первой строки задается автоматически, вертикальная полоса прокрутки отображается, даже если для содержимого достаточно места.
Я попытался установить ScrollViewer.VerticalScrollBarVisibility=»Hidden» в rowdefinition строки, но это не помогает.
Аналогично, я настроил внутренний GridControl так, чтобы он не использовал полосы прокрутки (используя некоторую магию Developer Express, а не только ScrollViewer, поскольку это не работает)
Тем не менее, что бы я ни делал, эта чертова полоса прокрутки появляется… Есть ли какой-нибудь способ выяснить, какой элемент управления отображает его, чтобы я мог отключить эту чертову штуку? Дело не только в том, что это некрасиво — прокрутка на самом деле портит макет!
Заранее спасибо!
Соответствующий код:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" ScrollViewer.VerticalScrollBarVisibility="Hidden" />
<RowDefinition Height="*" MaxHeight="240" />
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<dxg:GridControl Name="StudySizeGrid" Grid.Column="0" Grid.Row="0" >
<dxg:GridControl.Resources>
<ControlTemplate x:Key="{dxgt:TableViewThemeKey ResourceKey=ControlTemplate}">
<ScrollViewer x:Name="scr"
VerticalScrollBarVisibility="Disabled"
HorizontalScrollBarVisibility="Disabled"
Focusable="False"
dxg:GridControl.CurrentView="{Binding RelativeSource={RelativeSource TemplatedParent}}"
Template="{DynamicResource {dxgt:TableViewThemeKey ResourceKey=ScrollViewerTemplate}}">
<ScrollViewer.CanContentScroll>False</ScrollViewer.CanContentScroll>
</ScrollViewer>
</ControlTemplate>
</dxg:GridControl.Resources>
...
</dxg:GridControl>
РЕДАКТИРОВАТЬ ДЛЯ ПОЯСНЕНИЯ: это проблема с WPF 🙂
Комментарии:
1. Не могли бы вы опубликовать SS полосы прокрутки?
2. Извините, поскольку мой босс действительно параноик, и мы разрабатываем это для третьей стороны, мне не разрешено загружать скриншот : / Это глупо, но я действительно не могу пойти против слова вышестоящих…
Ответ №1:
Вы могли бы попробовать проверить VisualTree, я думаю, для этого может быть полезен Snoop, у него, вероятно, есть и другие полезные функции. Получение VisualTree — это тривиальный вопрос, хотя вы можете написать единственный рекурсивный метод, используя VisualTreeHelper
, поэтому вам может не понадобиться большое оружие.
например
public static TreeViewItem GetVisualTree(this DependencyObject dpo)
{
TreeViewItem item = new TreeViewItem();
item.Header = dpo.GetType().ToString().Split('.').Last();
if (dpo is FrameworkElement amp;amp; (dpo as FrameworkElement).Name != string.Empty) item.Header = " (" (dpo as FrameworkElement).Name ")";
int cCount = VisualTreeHelper.GetChildrenCount(dpo);
for (int i = 0; i < cCount; i )
{
item.Items.Add(VisualTreeHelper.GetChild(dpo, i).GetVisualTree());
}
return item;
}
Писал, что довольно давно, это очень схематично (не рекомендовал бы делать это методом расширения), получает все дерево за один раз, может быть изменен, чтобы извлекать дочерние элементы только при расширении узла.
Комментарии:
1. Спасибо, приятель! Я посмотрю на это как можно скорее — сейчас я на пути домой, но я проверю это завтра.
2. Спасибо за подсказку — похоже, это мне немного поможет ! 🙂
Ответ №2:
Вы могли бы использовать что-то вроде инструментов Google Chrome.
Я бы в Chrome щелкнул правой кнопкой мыши по области с полосами прокрутки и выбрал «Проверить элемент». Chrome выделит рамкой, на какой элемент вы смотрите. Затем вы можете перемещаться по HTML в инспекторе Google Chrome до тех пор, пока он не выделит элемент полосой прокрутки.
Затем вы можете найти причину оттуда.