WPF Combobox Настройка визуального стиля обводки - PullRequest
0 голосов
/ 14 февраля 2019

Итак, я создал свой собственный класс с именем ComboBoxUltra, и он наследуется от ComboBox в System.Windows.Controls.

Я перенастраиваю его и мне нужна помощь, чтобы узнать, как установить значение Stroke для Rectangle из FocusVisualStyle на новое DependencyProperty с помощью ComboBoxUltra.

Это то, что у меня есть и оно не работает.У меня есть другие вещи, определенные, если нужно, чтобы опубликовать это здесь ... Но это довольно долго.

В Xaml у меня есть:

<Style x:Key="ComboBoxFocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Rectangle SnapsToDevicePixels="true"
                               Stroke="{Binding RelativeSource={RelativeSource AncestorType={x:Type controls:ComboBoxPro}, AncestorLevel=1}, Path=FocusedBorderBrush}"
                               StrokeThickness="1" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

<Style TargetType="{x:Type controls:ComboBoxUltra}">
        <Setter Property="FocusVisualStyle" Value="{StaticResource ComboBoxFocusVisual}" />
        <Setter Property="Background" Value="{StaticResource ComboBox.Static.Background}" />
        <Setter Property="BorderBrush" Value="{StaticResource ComboBox.Static.Border}" />
        <Setter Property="Foreground" Value="{StaticResource {x:Static SystemColors.WindowTextBrushKey}}" />
        <Setter Property="BorderThickness" Value="1" />
        <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
        <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
        <Setter Property="Padding" Value="6,3,5,3" />
        <Setter Property="ScrollViewer.CanContentScroll" Value="true" />
        <Setter Property="ScrollViewer.PanningMode" Value="Both" />
        <Setter Property="Stylus.IsFlicksEnabled" Value="False" />
        <Setter Property="Template" Value="{StaticResource ComboBoxTemplate}" />

        <Setter Property="FontSize" Value="{DynamicResource TextFontSizeNormal}" />
        <Style.Triggers>
            <Trigger Property="IsEditable" Value="true">
                <Setter Property="IsTabStop" Value="false" />
                <Setter Property="Padding" Value="2" />
                <Setter Property="Template" Value="{StaticResource ComboBoxEditableTemplate}" />
            </Trigger>
        </Style.Triggers>
    </Style>

И в моем ComboBoxUltra классе у меня есть DependencyProperty как ...

public static readonly DependencyProperty FocusedBorderBrushProperty =
            DependencyProperty.Register(nameof(FocusedBorderBrush), typeof(Brush), typeof(ComboBoxUltra),
                new FrameworkPropertyMetadata(Brushes.Orange, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
        public Brush FocusedBorderBrush
        {
            get => (Brush)GetValue(FocusedBorderBrushProperty);
            set => SetValue(FocusedBorderBrushProperty, value);
        }

Я пробовалудаление FocusVisualStyle И просто сделайте Trigger на IsKeyboardFocusWithin, и установите кисть границы с помощью установщика, но это не сработало.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 14 февраля 2019

Невозможно привязать свойство ComboBox в FocusVisualStyle, поскольку оно отображается на украшенном слое.

Триггерный подход, который вы попробовали, является правильным.Просто не забудьте установить свойство FocusVisualStyle на null или установить свойство Stroke Rectangle на Transparent, чтобы избавиться от него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...