24

(ではなく)TextTrimmingにオプションを適用したいのですが。TextBoxTextBlock

コンパイラは、TextTrimmingオプションがの有効なプロパティではないことを教えてくれますTextbox

私はaであるファンシーなコントロールを行うことができ、TextblockそれがクリックされるとaになりTextbox、逆にTextblockフォーカスが失われると元に戻ります。

このようにする前に、それを可能にする組み込み関数がすでに存在するかどうか(またはよりスマートな方法がありますか)を知りたいですか?

編集:私が最後に欲しいのTextBoxはトリムです(完全なコンテンツはツールチップに表示されます)が、ユーザーがTextBox(「編集モード」で入力)を選択すると、完全なコンテンツが表示されます(トリムなし)したがって、ユーザーは全文を変更できます。フォーカスを失った場合TextBox(「表示モード」に戻る)、コンテンツは再びトリミングされます。

ありがとう

4

5 に答える 5

45

次のようなスタイルを試してください (変更がわかりやすいように背景色を追加しました)。

    <Style TargetType="TextBox">
      <Setter Property="Background" Value="Yellow" />
      <Style.Triggers>
        <DataTrigger Binding="{Binding IsKeyboardFocused, RelativeSource={RelativeSource Self}}" Value="false">
          <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate TargetType="TextBox">
                <TextBlock Text="{TemplateBinding Text}"  TextTrimming="CharacterEllipsis" Background="Red" />
              </ControlTemplate>
            </Setter.Value>
          </Setter>
        </DataTrigger>
      </Style.Triggers>
    </Style>
于 2012-04-19T12:47:17.453 に答える
3

Dan Puzey はすばらしい答えを持っていますが、 のスタイルが のTextBlock ように見えるように、さらに追加したかったのTextBoxです。

私が思いついたXAMLスタイルは次のとおりです。

<Style TargetType="TextBox">
    <Style.Triggers>
        <DataTrigger Binding="{Binding IsKeyboardFocused, RelativeSource={RelativeSource Self}}" Value="False">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="TextBox">
                        <Border BorderThickness="1" CornerRadius="1">
                            <Border.BorderBrush>
                                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                    <GradientStop Color="#FFABADB3" Offset="0"/>
                                    <GradientStop Color="#FFABADB3" Offset="0.044"/>
                                    <GradientStop Color="#FFE2E3EA" Offset="0.060"/>
                                    <GradientStop Color="#FFE3E9EF" Offset="1"/>
                                </LinearGradientBrush>
                            </Border.BorderBrush>
                            <TextBlock Padding="4,2,0,0" Text="{TemplateBinding Text}" TextTrimming="CharacterEllipsis"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>

これは、キーボード フォーカスがない場合のコントロールの外観です。

TextBlock - キーボード フォーカスなし

これは、キーボード フォーカスを取得した後のコントロールの外観です。

TextBox - キーボード フォーカスあり

于 2016-01-06T16:33:22.433 に答える
1

あなたが探しているのはこれだと思います

<TextBox Text="{Binding Path=String, Converter={StaticResource StringConverter}, ConverterParameter=Trim:Argument:AnotherArgument}" /> 

私はそれが役立つことを願っています:)

必要に応じて、トリム関数を呼び出して引数を渡します。split を使用して区切り文字を引数として渡すこともできます。

Binding.Converter の詳細については、こちらを参照してください。

于 2012-04-19T11:51:35.313 に答える
0

TextBoxフォーカスされているときは通常のエディターを表示し、フォーカスされTextBlockていないときはトリミング付きのコントロール テンプレートを作成できます。

于 2012-04-19T12:29:57.213 に答える