2016-07-15 8 views
3

RadCombobBoxは、1つのオプションが入力フィールドになるオプションのリストを持つように編集されています。あなたが選ぶことのできる入力フィールドにはさまざまなタイプがありますが、整数入力フィールドに問題があります。また、問題を示さないテキスト入力フィールドを持つものもあります。RadComboBoxの内部をクリックしようとするとフォーカスが間違っている

コンボボックスは、次のようになります。

enter image description here

テキストが予め設定された値があるテキストオプションの下に(それを気にしない)オランダ語で、ここでの考え方は、プリセットを選択することができますいずれかであります(整数値に対応)、または独自の値を入力することができます。

  • 私は(灰色で強調表示された)入力ボックスをクリックしようとした場合、それを選択して閉じます:私は(最後のものは非常に独特である)別の場所をクリックしようとするとどうなります

    コンボボックス(これは私が望むものではありません)。

  • コンボボックスの右側にある矢印をクリックしようとすると値が変わります。
  • マウスでスクロールすると、値が変更されます。
  • 入力ボックスにマウスを置いておくと、実際に値を入力することができます。
  • 私が最初に側面のボタンをクリックし、入力ボックス内をクリックすると、値を編集できます。

私が望むのは、入力ボックスをクリックして内部の値を編集できることです。入力が完了したらEnterキー(またはコンボボックスの外側)を押して閉じます。

どういうわけか、何か(私は100%は確信していません)が私に失敗するようです。

整数セレクタ

<Style x:Key="NumericUpDownStyle" TargetType="{x:Type telerik:RadNumericUpDown}"> 
    <Style.Triggers> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="BorderBrush" Value="{StaticResource AccentBrush}" /> 
     </Trigger> 
     <Trigger Property="IsEditable" Value="False"> 
      <Setter Property="SmallChange" Value="0" /> 
      <Setter Property="LargeChange" Value="0" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

<!-- Integer editor --> 
<DataTemplate x:Key="IntegerDataTemplate"> 
    <telerik:RadNumericUpDown x:Name="NumericUpDown" 
           Width="{Binding Path=ActualWidth, 
               ElementName=Editor}" 
           MaxWidth="{Binding Path=ActualWidth, 
               ElementName=Editor, 
               Converter={StaticResource WidthToWidthConverter}}" 
           HorizontalContentAlignment="Left" 
           Background="Transparent" 
           FontFamily="{telerik:Windows8Resource ResourceKey=FontFamilyStrong}" 
           IsInteger="True" 
           Style="{StaticResource NumericUpDownStyle}" 
           UpdateValueEvent="PropertyChanged" 
           Value="{Binding Path=Value, 
               UpdateSourceTrigger=PropertyChanged, 
               NotifyOnSourceUpdated=True}"> 
     <telerik:RadNumericUpDown.NumberFormatInfo> 
      <globalization:NumberFormatInfo NumberGroupSeparator="" /> 
     </telerik:RadNumericUpDown.NumberFormatInfo> 
    </telerik:RadNumericUpDown> 
</DataTemplate> 

<!-- Integer as Option --> 
<DataTemplate x:Key="OptionsDataTemplate"> 
    <TextBlock Height="20" Text="{Binding Converter={StaticResource IntegerSelectorObjectToStringConverter}}" /> 
</DataTemplate> 

<local:SelectorTypeTemplateSelector x:Key="IntegerTemplateSelector" 
            OptionsDataTemplate="{StaticResource OptionsDataTemplate}" 
            SelectorDataTemplate="{StaticResource IntegerDataTemplate}" /> 

どこかが間違って起こっている、周りにそれを修正する正しい方法に私を指すことができます誰も(仕事があるでしょうです:ここ はIntegerDataTemplateのためのXAMLコードであります同様にうまくいく)。

私は同じコードを持っていますが、正しく動作するテキストボックスを追加したいと思っています。比較のために以下のコードを追加しましたが、大きな違いは見つかりませんでした。

(実際には正常に動作します)テキストセレクタ

<Style x:Key="TextBoxStyle" TargetType="{x:Type telerik:RadWatermarkTextBox}"> 
    <Setter Property="BorderBrush" Value="{StaticResource BasicBrush}" /> 
    <Setter Property="FontFamily" Value="{telerik:Windows8Resource ResourceKey=FontFamilyStrong}" /> 
    <Setter Property="Padding" Value="2,2,0,0" /> 
    <Setter Property="Validation.ErrorTemplate" Value="{StaticResource ErrorTemplate}" /> 
    <Setter Property="telerik:RadWatermarkTextBox.WatermarkTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <TextBlock Margin="2,3,0,0" 
          FontFamily="Segoe UI" 
          FontStyle="Italic" 
          Foreground="{StaticResource WaterMarkBrushNoOpacity}" 
          Padding="0,-2,0,0" 
          Text="{Binding}" /> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="BorderBrush" Value="{StaticResource AccentBrush}" /> 
     </Trigger> 
     <Trigger Property="IsReadOnly" Value="True"> 
      <Setter Property="BorderBrush" Value="{StaticResource MarkerDisabledBrush}" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

<!-- String editor --> 
<DataTemplate x:Key="StringDataTemplate"> 
    <telerik:RadWatermarkTextBox x:Name="WatermarkTextBox" 
           HorizontalAlignment="Stretch" 
           HorizontalContentAlignment="Stretch" 
           VerticalContentAlignment="Top" 
           Background="Transparent" 
           BorderThickness="1" 
           Style="{StaticResource TextBoxStyle}" 
           Text="{Binding Path=Value, 
               UpdateSourceTrigger=PropertyChanged, 
               NotifyOnSourceUpdated=True}" /> 
</DataTemplate> 

<!-- String as Option --> 
<DataTemplate x:Key="OptionsDataTemplate"> 
    <TextBlock Height="20" Text="{Binding Converter={StaticResource StringSelectorObjectToStringConverter}}" /> 
</DataTemplate> 

<local:SelectorTypeTemplateSelector x:Key="StringTemplateSelector" 
            OptionsDataTemplate="{StaticResource OptionsDataTemplate}" 
            SelectorDataTemplate="{StaticResource StringDataTemplate}" /> 

答えて

1

ソリューションはかなり簡単だった、私はダウンプレビューマウスでそれを修正しようとしているが、私は何をするために必要なことは追加することで、プレビューマウスアップであった:としてRadComboBoxコードを作っPreviewMouseLeftButtonUp="EditorPreviewMouseLeftButtonUp"をXAMLで、次の:選択が変更されたときのMouseUpがある

private void EditorPreviewMouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e) 
{ 
    var originalSource = e.OriginalSource as FrameworkElement; 
    if ((originalSource != null) && (originalSource.ParentOfType<TextBox>() != null)) 
    { 
     e.Handled = true; 
    } 
} 

telerik:RadComboBox x:Name="Editor" 
    BorderThickness="0" 
    FontWeight="SemiBold" 
    ItemTemplateSelector="{StaticResource IntegerTemplateSelector}" 
    PreviewMouseLeftButtonUp="EditorPreviewMouseLeftButtonUp" 
          SelectionBoxTemplate="{StaticResource SelectionboxTemplate}" 
    Validation.ErrorTemplate="{StaticResource ErrorTemplate}" /> 

コードが背後にあるこのリク見えましたコンボボックスを閉じる原因となるイベントが呼び出されます。イベントが完了すると、コンボボックスは閉じられません。値を変更した後Enterキーを押すだけで、選択と更新が正しく行われます。

1

は、それが実際にすべてのこまごまとした(例えばRadComboBoxスタイル+コード)の周りいじることなく、何が起こっているのかを知ることは本当に難しいですが、それ特に標準WPF ComboBoxにはポップアップを開くFocusedDropDown状態があるので、フォーカスが失われたときに自動的に閉じられるドロップダウンと何かがあると想定するのは自然でしょう。

RadComboBoxをTelerikからインポートして複製し、そのコードを新しいクラスに拡張して(インポートされたテンプレートでスタイルを変更して)、試みることができます。これにより、メソッドをオーバーライドしてイベントにアタッチすることができます(例:Got/LostFocus)を開き、必要に応じて調整することができるかどうかをテンプレートで確認します。

しかし、テンプレートを再スタイルすることができるという理由だけで、既存のコントロールにこのような動作を適用しようとすると、しばしば多くの悲しみ(および時間が無駄になります)で終わることがあります。

数字のアップ/ダウンがコンボボックスに埋め込まれているNumericRadComboBoxを作成する方が簡単だと感じました。そのため、ドロップダウン矢印の横に数値の上/下ボタンがあるようにRadComboBoxを再設定し、手動で増減動作を実装します。

enter image description here

関連する問題