Не удается полностью создать ListBox/Scrollviewer в WPF
Я использую пользовательские полосы прокрутки, созданные нами с помощью стандартных элементов управления ControlTemplates, однако, когда я применяю их к ListBox, в правом нижнем углу есть угол, который я не могу найти, чтобы переопределить.
К сожалению, я не могу опубликовать фотографию, пока не получу больше очков. Но угол, о котором я говорю, - это когда появляется вертикальная и горизонтальная полоса прокрутки, в правом нижнем углу есть пробел, который заполняется не совсем белым цветом, который я не могу выполнить ovrerride
Ответы
Ответ 1
Это часть кода шаблона, который я получил для ScrollViewer с помощью Blend. Я добавил прямоугольник в нижнем правом углу и установил Fill to Red. Вы можете настроить его таким же образом или вы можете расширить один из ScrollBar, чтобы покрыть пространство, используя Grid.RowSpan = "2" для VerticalScrollBar (первый) или Grid.ColumnSpan = "2" для HorizontalScrollBar (второй).
<Style TargetType="{x:Type ScrollViewer}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ScrollContentPresenter Grid.Column="0"/>
<ScrollBar Name="PART_VerticalScrollBar" Grid.Row="0" Grid.Column="1" Value="{TemplateBinding VerticalOffset}" Maximum="{TemplateBinding ScrollableHeight}" ViewportSize="{TemplateBinding ViewportHeight}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/>
<ScrollBar Name="PART_HorizontalScrollBar" Orientation="Horizontal" Grid.Row="1" Grid.Column="0" Value="{TemplateBinding HorizontalOffset}" Maximum="{TemplateBinding ScrollableWidth}" ViewportSize="{TemplateBinding ViewportWidth}" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/>
<Rectangle Grid.Row="1" Grid.Column="1" Fill="Red"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Ответ 2
Две вещи, которые могут помочь:
1) Используйте Snoop, чтобы изучить дерево элементов вашего приложения, это может помочь найти проблему.
2) В зависимости от того, как вы начали свой контроль, вы можете подумать о том, чтобы начать с копии стандартного списка ListBox. Я обнаружил проблемы с некоторыми элементами управления, когда начинаю стилинг с пустого или частичного шаблона.
надеюсь, что поможет
Ответ 3
Еще два решения работают.
1) Цвет прямоугольника является динамическим, с ключом "SystemColors.ControlBrushKey". Вы можете переопределить этот ключ в пользовательском стиле или ресурсы элемента управления ScrollViewer (или одного из его предков). Источник: этот вопрос на MSDN.
Пример:
<!-- In a style -->
<Style x:Key="MyCustomScrollViewer" TargetType="{x:Type ScrollViewer}">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
</Style.Resources>
</Style>
<!-- Or in the control -->
<ScrollViewer>
<ScrollViewer.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
</ScrollViewer.Resources>
</ScrollViewer>
2) Установите (те же места, что и выше) стиль Rectangle
со скрытой видимостью. Предупреждение: это будет иметь побочные эффекты, если прямоугольники содержатся в потомках элемента управления.
<Style x:Key="MyCustomScrollViewer" TargetType="{x:Type ScrollViewer}">
<Style.Resources>
<!-- 'BasedOn' can be omitted -->
<Style TargetType="Rectangle" BasedOn="{StaticResource {x:Type Rectangle}}">
<Setter Property="Visibility" Value="Hidden"/>
</Style>
</Style.Resources>
</Style>