В WPF как установить стиль, чтобы при выделении поля со списком он не выделялся? - PullRequest
1 голос
/ 16 февраля 2009

Я создал стиль FlatCombo, который хочу применить к комбинированному списку. Одна вещь, которая не работает так, как я хочу, это когда фокус находится в ComboBox. Я почти не хочу указывать на то, что у него есть фокус. В настоящее время в области текста есть синяя подсветка. Я предполагаю, что это взято из моего стороннего словаря ресурсов. Как настроить мой локальный стиль, чтобы все, что он показывает на фокусе, было светлой пунктирной линией?

Спасибо

Dave

<UserControl.Resources>

    <Style x:Key="MyFocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Rectangle Margin="-1" StrokeThickness="1" Stroke="Black" StrokeDashArray="1 2"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <ControlTemplate x:Key="FlatCombo" TargetType="{x:Type ComboBox}">
    <ContentControl            
        Content="{TemplateBinding SelectionBoxItem}"            
        ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"            
        ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"            
        Margin="0,0,0,0"  Focusable="True"

        />
</ControlTemplate>

<Style TargetType="{x:Type ComboBox}" x:Key="DropDown">
    <Setter Property="OverridesDefaultStyle" Value="False" />
    <Style.Triggers>
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="IsMouseOver" Value="False" />
                <Condition Property="IsFocused" Value="False"/>
            </MultiTrigger.Conditions>
            <Setter Property="Template" Value="{StaticResource FlatCombo}" />
        </MultiTrigger>
    </Style.Triggers>
</Style>

        <ComboBox IsSynchronizedWithCurrentItem="True" x:Name="ComboBoxMinute" Width="Auto" 
              Height="Auto" HorizontalAlignment="Center" 
              Background="{Binding Path=Background, ElementName=TextBlockDate, Mode=Default}" 
              BorderBrush="{x:Null}" FontFamily="{Binding Path=FontFamily, 
              ElementName=TextBlockDate, Mode=Default}" 
              FontSize="{Binding Path=FontSize, ElementName=TextBlockDate, Mode=Default}" 
              Foreground="{Binding Path=Foreground, ElementName=TextBlockDate, Mode=Default}" 
              Padding="0,0,0,0" MaxDropDownHeight="200" Style="{StaticResource DropDown}" VerticalContentAlignment="Stretch" 
              VerticalAlignment="Center" FocusVisualStyle="{DynamicResource MyFocusVisual}"/>

1 Ответ

1 голос
/ 16 февраля 2009

Вы должны установить для OverridesDefaultStyle значение True, а не false. Вы полностью заменяете элемент управления, поэтому все будет заменено.

Однако, глядя на свой код, вы говорите, что хотите, чтобы он был плоским, когда сфокусирован; все же ваши триггеры переходят только к плоскому шаблону элемента управления, когда элемент управления не сфокусирован, а мышь не находится над над ним. Это то, что вы хотите?

Еще один аспект, который следует рассмотреть здесь, заключается в том, что текстовое поле в случае редактируемого комбо будет иметь выделение текста синим цветом, что, как я полагаю, в настоящее время изменить нельзя.

...