1

アイテムが選択されていないコンボボックスに「SELECT An Item」を追加する方法を探しています。これは、デフォルトで選択されたアイテムとは異なります。

コンボボックスに「アイテムを選択する」と表示させ、可能な選択のリストと選択したアイテムの別のモデルにバインドする必要があります。

複数のコンボボックスに適用でき、プロンプトを設定する方法があるスタイルを好みます。http://marlongrech.wordpress.com/2008/03/09/input-prompt-support-in-wpf/で似たようなものを見たことがありますが、スムーズに機能せず、リストにアクセスするには2回クリックする必要があります.

ありがとう!

4

1 に答える 1

1

リンクした adorner ソリューションをいくつか変更して使用するか、スタイルとコンバーターを使用してこれを行うことができます。

装飾液

adorner ソリューションはより複雑ですが、より優れたインターフェイスとカプセル化を備えています。必要な変更は簡単ですが、WPF の専門家でないと難しいかもしれません。彼らです:

  1. ComboBox を別の特殊なケース (TextBox など) として認識します。その SelectedItemChanged をサブスクライブし、SelectedItem==null を使用して装飾の可視性を更新します。

  2. 入力イベントを処理しない (HitTestVisible=False、Focusable=False など)

この場合、添付プロパティを設定するだけで、ComboBox スタイルは非常にシンプルになります。

スタイルとコンバーター

スタイルとコンバーターでそれを行う方が簡単かもしれません。コンバーターの本体は次のとおりです。

  object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  {
    return value==null ? Visibility.Visible : Visibility.Hidden;
  }

あなたのスタイルは、デフォルトの ComboBox スタイルを置き換え、テーマからの ControlTemplate のコピーを含み、次のようなものでラップされます (または装飾を使用します):

  <Style TargetType="{x:Class ComboBox}">
    <Style.Setters>
      <Setter Property="local:MyInputPromptClass.PromptText" Value="SELECT an item" />
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Class ComboBox}">
            <Grid>
              ... existing XAML from theme ControlTemplate ...
              <TextBlock
                Text="{Binding local:MyInputPromptClass.PromptText, RelativeSource={RelativeSource TemplatedParent}}"
                Visibility="{Binding SelectedItem, Converter={x:Static local:MyInputPromptClass.Converter}, RelativeSource={RelativeSource TemplatedParent}}"
                HitTestVisible="False" Focusable="False"
                HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
            </Grid>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style.Setters>
  </Style>

このソリューションは、テーマから既定の ComboBox テンプレートをコピーすると、現在の Windows テーマを追跡しないアプリになってしまうため、他のソリューションほど満足のいくものではありません。複数の ControlTemplate を StaticResource といくつかのトリッキーなバインドと共に使用することで、これを回避することができますが、その時点では、単に adorner と添付プロパティを使用することをお勧めします。

于 2009-11-03T01:20:55.777 に答える