1

私はテレリックを使用していますが、この質問にはあまり意味がありません。私のアプリケーションは 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") の上に「禁止記号」を配置することです。Border と Rectangle は、次のような記号を作成します: Picture .

コンボボックス自体は、ローカルに設定されたツールチップを保持できる必要があります。そのため、ローカルで解決せずに2つを組み合わせる方法を見つけない限り、コンボボックスのツールチップにエラーメッセージを表示することはできません(リソースディクショナリーにそのコードが必要です)。

また、「禁止サイン」でマウスのクリックを処理したくありません (ユーザーが「禁止サイン」をクリックすると、クリックをむさぼり食い、コンボボックスがドロップダウンするのを防ぎます。

グリッドと ErrorTemplate 内の境界線で IsHitTestVisible を false に設定しようとしましたが、ツールチップが表示されませんでした。また、同じ 2 つのコンストロールで IsEnabled を false に設定しようとしましたが、コンボボックス自体にマウスクリックが送信されません (コンボボックスのリストはドロップダウンしません)。

コンボボックススタイルまたはエラーテンプレートで直接これを行う方法はありますか? コードビハインドも気にしませんが、コンボボックススタイルが使用されている場所にコードをローカルに追加したくありません。

4

0 に答える 0