● ControlTemplateを使用したTextBoxのスタイルを用意し(waterMark付・・・ネット上で調べて参考)、スタイルを継承
TextBox
のTemplate
に、TextBox
を入れたりしてはいけません。
PART_ContentHost
が本来の入力エリアですが、端のぎりぎりをクリックすると意図していないところに入力されます。
デザイナでコントロールを右クリックし「テンプレートの編集」ー「コピーして編集」で、既定のスタイルとテンプレートを出力すると参考になります。
● 継承先ではStyle.Triggersを追加(特定の条件時にTextBoxのBackgroundを変える)
Trigger
でTextBox
のBackground
を変えても、ControlTemplate
で誰もBackground
使っていません。
ControlTemplate
で(何かに)TemplateBinding
してください。
xml
1<ControlTemplate TargetType="TextBox">
2 <Border Background="{TemplateBinding Background}">
スタイルとテンプレート - WPF .NET Framework | Microsoft Learn
直接今回は関係ないですが、TemplateBindingを使用した方法ですと、例えば上記と同じトリガー条件の時に
TextBoxのBorderのCornerRadiusを5→10にするのような仕様の時に外からのプロパティ変更方法はどのようにすればよろしいのでしょうか?
Setter.Property
は、必ずしもTargetType
の依存関係プロパティである必要はありません。
↓のような使い方ができます。
xml
1<Setter Property="Border.CornerRadius" Value="4" />
2<!-- 省略 -->
3<Border CornerRadius="{TemplateBinding Border.CornerRadius}">
xml
1<Window
2 x:Class="Q179145.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 ThemeMode="System">
8 <Window.Resources>
9 <Style x:Key="Watermark_TextBox" TargetType="TextBox">
10 <Setter Property="Template">
11 <Setter.Value>
12 <ControlTemplate TargetType="TextBox">
13 <Grid Background="White">
14 <TextBox>
15 <TextBox.Resources>
16 <Style TargetType="TextBox">
17 <Setter Property="BorderThickness" Value="2" />
18
19 <!--<Style.Triggers>
20 <DataTrigger Binding="{Binding IsChecked, ElementName=radio1}" Value="True">
21 <Setter Property="Background" Value="LightYellow" />
22 </DataTrigger>
23 </Style.Triggers>-->
24
25 </Style>
26 <Style TargetType="Border">
27 <Setter Property="CornerRadius" Value="5" />
28 </Style>
29 </TextBox.Resources>
30 </TextBox>
31 <ScrollViewer x:Name="PART_ContentHost" Margin="5,0,10,0" VerticalAlignment="Center" />
32 <TextBlock
33 x:Name="waterMarkLabel"
34 Margin="5,0,10,0"
35 VerticalAlignment="Center"
36 FontStyle="Italic"
37 Opacity=".5"
38 Text="{TemplateBinding Tag}"
39 Visibility="Collapsed" />
40 </Grid>
41 <ControlTemplate.Triggers>
42 <Trigger Property="Text" Value="">
43 <Setter TargetName="waterMarkLabel" Property="Visibility" Value="Visible" />
44 </Trigger>
45 </ControlTemplate.Triggers>
46 </ControlTemplate>
47 </Setter.Value>
48 </Setter>
49 </Style>
50
51 <Style x:Key="TableFormatSelected_TextBox" BasedOn="{StaticResource Watermark_TextBox}" TargetType="TextBox">
52 <Style.Triggers>
53 <DataTrigger Binding="{Binding IsChecked, ElementName=radio1}" Value="True">
54 <Setter Property="Background" Value="LightYellow" />
55 </DataTrigger>
56 </Style.Triggers>
57 </Style>
58
59
60 <Style x:Key="TextBoxStyle1" TargetType="TextBox">
61 <Setter Property="BorderThickness" Value="2" />
62 <Setter Property="Padding" Value="5,0" />
63 <Setter Property="Tag" Value="Watermark" />
64 <Setter Property="Border.CornerRadius" Value="5" />
65 <Setter Property="Template">
66 <Setter.Value>
67 <ControlTemplate TargetType="TextBox">
68 <Border
69 x:Name="border"
70 Background="{TemplateBinding Background}"
71 BorderBrush="{TemplateBinding BorderBrush}"
72 BorderThickness="{TemplateBinding BorderThickness}"
73 CornerRadius="{TemplateBinding Border.CornerRadius}"
74 SnapsToDevicePixels="True">
75 <Grid>
76 <ScrollViewer
77 x:Name="PART_ContentHost"
78 Focusable="False"
79 HorizontalScrollBarVisibility="Hidden"
80 VerticalScrollBarVisibility="Hidden" />
81 <TextBlock
82 x:Name="waterMarkLabel"
83 Margin="{TemplateBinding Padding}"
84 VerticalAlignment="Center"
85 FontStyle="Italic"
86 Opacity="0.5"
87 Text="{TemplateBinding Tag}"
88 Visibility="Collapsed" />
89 </Grid>
90 </Border>
91 <ControlTemplate.Triggers>
92 <Trigger Property="Text" Value="">
93 <Setter TargetName="waterMarkLabel" Property="Visibility" Value="Visible" />
94 </Trigger>
95 <Trigger Property="IsEnabled" Value="False">
96 <Setter TargetName="border" Property="Opacity" Value="0.56" />
97 </Trigger>
98 <Trigger Property="IsMouseOver" Value="True">
99 <Setter TargetName="border" Property="BorderBrush" Value="#FF7EB4EA" />
100 </Trigger>
101 <Trigger Property="IsKeyboardFocused" Value="True">
102 <Setter TargetName="border" Property="BorderBrush" Value="#FF569DE5" />
103 </Trigger>
104 </ControlTemplate.Triggers>
105 </ControlTemplate>
106 </Setter.Value>
107 </Setter>
108 </Style>
109
110 <Style x:Key="TextBoxStyle2" BasedOn="{StaticResource TextBoxStyle1}" TargetType="TextBox">
111 <Style.Triggers>
112 <DataTrigger Binding="{Binding IsChecked, ElementName=radio1}" Value="True">
113 <Setter Property="Background" Value="LightYellow" />
114 <Setter Property="Border.CornerRadius" Value="10" />
115 </DataTrigger>
116 </Style.Triggers>
117 </Style>
118 </Window.Resources>
119
120 <StackPanel>
121 <CheckBox x:Name="radio1" />
122
123 <GroupBox Header="original">
124 <TextBox Style="{StaticResource TableFormatSelected_TextBox}" Tag="Watermark" />
125 </GroupBox>
126
127 <GroupBox Header="better">
128 <TextBox Style="{StaticResource TextBoxStyle1}" />
129 </GroupBox>
130
131 <GroupBox Header="BasedOn">
132 <TextBox Style="{StaticResource TextBoxStyle2}" />
133 </GroupBox>
134 </StackPanel>
135</Window>

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/13 07:23
2019/03/13 07:36
2019/03/14 00:56