Не удается полностью оформить ListBox / Scrollviewer в WPF - PullRequest
12 голосов
/ 22 декабря 2009

Я использую пользовательские полосы прокрутки, которые мы создали с помощью стандартных шаблонов ControlTemplates, однако, когда я применяю их к ListBox, в правом нижнем углу есть угол, который я не могу найти, чтобы переопределить.

К сожалению, я не могу опубликовать фотографию, пока не наберу больше очков. Но угол, на который я ссылаюсь, - это когда появляется вертикальная и горизонтальная полоса прокрутки, в правом нижнем углу есть пространство, заполненное не совсем белым цветом, которое я не могу переопределить

Ответы [ 3 ]

10 голосов
/ 22 декабря 2009

это часть кода шаблона, которую я получил для ScrollViewer, используя Blend. Я добавил прямоугольник в нижнем правом углу и установил заливку на красный. Вы можете стилизовать его таким же образом или расширить одну из полос прокрутки, чтобы покрыть пространство, используя 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>
0 голосов
/ 21 января 2019

Еще два решения работают.

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>
0 голосов
/ 22 декабря 2009

Две вещи, которые могут помочь:

1) Используйте Snoop для изучения дерева элементов вашего приложения, это может помочь в поиске проблемы.

2) В зависимости от того, как вы запустили свой элемент управления, вы можете подумать о том, чтобы начать с копии стандартного ListBox. У меня возникли проблемы с некоторыми элементами управления, когда я начинаю стилизацию с пустого или частичного шаблона.

надеюсь, что поможет

...