質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

2400閲覧

【WPF】TextBoxにTemplateを適用すると入力できなくなる。

ksgtksa43

総合スコア2

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

1グッド

1クリップ

投稿2022/06/10 07:37

前提

有効時、無効時でTextboxの見た目をすきなように変えたいと思っています。
Textboxにはxaml上であらかじめText=”100”としており、ビルド時は無効の状態に設定しています。
また、Textboxは以下のようなテンプレートを設定しています。

xaml

1 <ControlTemplate x:Key="text" TargetType="TextBox"> 2 <Border Name="border" 3 BorderThickness="1" 4 BorderBrush="{TemplateBinding BorderBrush}" 5 Background="{TemplateBinding Background}"> 6 7 <ContentPresenter VerticalAlignment="Center" 8 HorizontalAlignment="Center" /> 9 </Border> 10 <ControlTemplate.Triggers> 11 <Trigger Property="IsEnabled" Value="true"> 12 <Setter TargetName="border" 13 Property="Background" 14 Value="white" /> 15 <Setter TargetName="border" 16 Property="BorderBrush" 17 Value="#707070" /> 18 <Setter Property="Foreground" 19 Value="black" /> 20 </Trigger> 21 <Trigger Property="IsEnabled" Value="false"> 22 <Setter TargetName="border" 23 Property="Background" 24 Value="#EDEDED" /> 25 <Setter TargetName="border" 26 Property="BorderBrush" 27 Value="#707070" /> 28 <Setter Property="Foreground" 29 Value="#EDEDED" /> 30 </Trigger> 31 </ControlTemplate.Triggers> 32 </ControlTemplate>

色の指定方法がバラバラで読みにくくてすいません。
やりたいことは有効時は背景白、文字色黒に。
無効時は背景グレー、文字色グレー(背景と同じ色)にして、Text="100"が見えなくなるようにしたいです。

このまま実行すると無効時はやりたいことができているのですが、
有効化した際にText="100"が出てきません。さらに有効化したはずのTextboxに何も打ち込めなくなります。

Templateを外してみるとText=”100”が表示され、有効化した際は入力もちゃんとできます。

Templateについて最近学び始めたので、何か足りない項目や、
そもそもTextBoxの有効化の認識がおかしいなど教えていただきたいです。

よろしくお願いします。

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

有効化した際にText="100"が出てきません。さらに有効化したはずのTextboxに何も打ち込めなくなります。

PART_ContentHostScrollViewer)が必要です。
TextBox のスタイルとテンプレート - WPF .NET Framework | Microsoft Docs

デザイナでコントロールを右クリックし「テンプレートの編集」ー「コピーして編集」で、既定のスタイルとテンプレートを出力すると参考になります。

無効時は背景グレー、文字色グレー(背景と同じ色)にして、Text="100"が見えなくなるようにしたいです。

おそらく「無効の時は内容を見せたくない」ということだと思いますが、コンテキストメニューでばれますね(無効時も出るのが、そもそもおかしい気がしますが^^;
内容がばれる図

コンテキストメニューを生かしたまま、無効時にだけ出さないようにするならこんな感じでしょうか。
xaml - WPF: How to style or disable the default ContextMenu of a TextBox - Stack Overflow

xml

1<Window 2 x:Class="Qu4946lsl517ame.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 Width="800" 6 Height="450"> 7 <Window.Resources> 8 <ControlTemplate x:Key="text" TargetType="TextBox"> 9 <Border 10 Name="border" 11 Background="{TemplateBinding Background}" 12 BorderBrush="{TemplateBinding BorderBrush}" 13 BorderThickness="1"> 14 <ScrollViewer x:Name="PART_ContentHost" /> 15 </Border> 16 <ControlTemplate.Triggers> 17 <Trigger Property="IsEnabled" Value="true"> 18 <Setter TargetName="border" Property="Background" Value="white" /> 19 <Setter TargetName="border" Property="BorderBrush" Value="#707070" /> 20 <Setter Property="Foreground" Value="black" /> 21 </Trigger> 22 <Trigger Property="IsEnabled" Value="false"> 23 <Setter TargetName="border" Property="Background" Value="#EDEDED" /> 24 <Setter TargetName="border" Property="BorderBrush" Value="#707070" /> 25 <Setter Property="Foreground" Value="#EDEDED" /> 26 </Trigger> 27 </ControlTemplate.Triggers> 28 </ControlTemplate> 29 30 31 <!-- 32 [xaml - WPF: How to style or disable the default ContextMenu of a TextBox - Stack Overflow](https://stackoverflow.com/questions/9632/wpf-how-to-style-or-disable-the-default-contextmenu-of-a-textbox) 33 --> 34 <ContextMenu x:Key="TextBoxContextMenu" Visibility="Collapsed" /> 35 <Style x:Key="TextBoxStyle1" TargetType="{x:Type TextBox}"> 36 <Setter Property="Template" Value="{StaticResource text}" /> 37 <Style.Triggers> 38 <Trigger Property="IsEnabled" Value="false"> 39 <Setter Property="ContextMenu" Value="{StaticResource TextBoxContextMenu}" /> 40 </Trigger> 41 </Style.Triggers> 42 </Style> 43 </Window.Resources> 44 45 <StackPanel> 46 <CheckBox 47 x:Name="checkBox" 48 Margin="10" 49 VerticalContentAlignment="Center" 50 Content="IsEnabled" /> 51 <TextBox 52 Margin="10" 53 IsEnabled="{Binding IsChecked, ElementName=checkBox}" 54 Template="{StaticResource text}" 55 Text="100" /> 56 57 <TextBox 58 Margin="10" 59 IsEnabled="{Binding IsChecked, ElementName=checkBox}" 60 Style="{StaticResource TextBoxStyle1}" 61 Text="100" /> 62 </StackPanel> 63</Window>

投稿2022/06/10 09:34

編集2023/07/30 09:04
TN8001

総合スコア9326

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ksgtksa43

2022/06/13 04:17

回答ありがとうございます。 参考にさせていただいたところ、やりたいことを実現できました! テンプレートについては独学だったので既存のテンプレートの方もとても参考になりました。 教えていただいてありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問