Сделать ErrorTemplate в стиле на ComboBox разрешить всплывающую подсказку, но не щелчок мышью

Я использую telerik, но это не должно много значить для этого вопроса. Мое приложение WPF (.Net 4.5).

У меня есть стиль, который я использую для всех выпадающих списков, который имеет шаблон ошибки. Стиль выглядит так:

  <Style TargetType="{x:Type telerik:RadComboBox}" x:Key="RadComboBoxStyle" >
            <Setter Property="FontFamily" Value="Calibri"/>
            <Setter Property="FontSize" Value="12"/>
            <Setter Property="Background" Value="{StaticResource InputBrush}" />
            <Setter Property="BorderBrush" Value="{StaticResource InputBorderBrush}" />
            <Setter Property="Validation.ErrorTemplate" Value="{StaticResource RadComboBoxValidationErrorTemplate}" />
        </Style>

Мой ErrorTemplate выглядит так:

<ControlTemplate TargetType="{x:Type Control}" x:Key="RadComboBoxValidationErrorTemplate">

            <Grid ToolTipService.IsEnabled="True" ToolTipService.ShowOnDisabled="True" 
                        ToolTip="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors), Converter={StaticResource ValidationErrorsConverter}}">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>

                <Border BorderBrush="{StaticResource ErrorBrush}" BorderThickness="3" Panel.ZIndex="999" HorizontalAlignment="Right" Margin="0,0,10,0"
                        Background="Transparent" DockPanel.Dock="right"  Width="16" Height="16" CornerRadius="10">
                    <Rectangle Fill="{StaticResource ErrorBrush}" HorizontalAlignment="Stretch" VerticalAlignment="Center" Height="3" RenderTransformOrigin="0.5,0.5">
                        <Rectangle.RenderTransform>
                            <RotateTransform Angle="315" />
                        </Rectangle.RenderTransform>
                    </Rectangle>
                </Border>

                <AdornedElementPlaceholder Name="customAdorner" VerticalAlignment="Center" >
                    <Border BorderBrush="{StaticResource ErrorBrush}" BorderThickness="1"  />
                </AdornedElementPlaceholder>

            </Grid>

        </ControlTemplate>

Все это определено в глобальном ResourceDictionary.

Что этот код делает, так это помещает "запрещенный знак" поверх выпадающего списка (Panel.ZIndex="999"), непосредственно перед кнопкой раскрывающегося списка (с использованием полей). Граница и прямоугольник делают знак очень похожим на это: Изображение.

Сам комбинированный список должен содержать подсказку, установленную локально. Таким образом, сообщение об ошибке не может быть отображено во всплывающей подсказке в выпадающем списке - если только я не найду способ объединить два, не решая его локально (я хочу этот код в моем ресурсе ресурсов).

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

Я попытался установить для IsHitTestVisible значение false в сетке и на границе внутри ErrorTemplate, но в результате всплывающая подсказка не отображалась. Я также попытался установить для параметра IsEnabled значение false на тех же двух элементах управления, но это не привело бы к щелчку мыши по самому комбинированному списку (список в раскрывающемся списке не выпадает).

Есть ли способ сделать это непосредственно в стиле combobox или в шаблоне error? Я даже не против иметь код позади - но я действительно не хочу добавлять код локально, где используется стиль combobox.

0 ответов

Другие вопросы по тегам