質問編集履歴

2

期待通りの動作をするコードビハインドを追記しました。

2019/10/30 07:21

投稿

bep
bep

スコア6

test CHANGED
File without changes
test CHANGED
@@ -153,3 +153,43 @@
153
153
  ホワイト色でクリアした後でも個々の日をマウスホバー時にピンク色にすることは
154
154
 
155
155
  可能でしょうか?
156
+
157
+
158
+
159
+ 上手く動作したCalendarDayButtonの背景をクリアするコードは以下の通りです。
160
+
161
+ ```C#
162
+
163
+ void AllDaysClear(CalendarDayButton[] days)
164
+
165
+ {
166
+
167
+ foreach (var day in days)
168
+
169
+ {
170
+
171
+ var border = day.Children<Border>().FirstOrDefault();
172
+
173
+ if (border != null)
174
+
175
+ {
176
+
177
+ border.BorderBrush = Brushes.Black;
178
+
179
+ //border.Background = Brushes.White; //期待通りの動作をしない
180
+
181
+ border.ClearValue(BackgroundProperty); //期待通りの動作をする
182
+
183
+ day.IsEnabled = true;
184
+
185
+ }
186
+
187
+ }
188
+
189
+ }
190
+
191
+ ```
192
+
193
+ Childrenメソッドは「じんぐる様」の下記サイトのコードを拝借し検証しました。
194
+
195
+ https://blog.xin9le.net/entry/2013/10/29/222336

1

Calendarコントロールの個々の日で同様の動作を実現したいです。

2019/10/30 07:21

投稿

bep
bep

スコア6

test CHANGED
File without changes
test CHANGED
@@ -79,3 +79,77 @@
79
79
 
80
80
 
81
81
  何か良い方法がありましたらご教示ください。
82
+
83
+
84
+
85
+ 実際に実現したいことはLabelコントロールではなくCalendarコントロールです。
86
+
87
+ 改めてXAMLの抜粋を記載致します。複雑になるため動作に関係のないイベントハンドラ
88
+
89
+ は省略しております。
90
+
91
+ ```XAML
92
+
93
+ <Viewbox>
94
+
95
+ <Calendar x:Name="MyCalendar">
96
+
97
+ <Calendar.CalendarDayButtonStyle>
98
+
99
+ <Style TargetType="{x:Type CalendarDayButton}">
100
+
101
+ <Setter Property="Template">
102
+
103
+ <Setter.Value>
104
+
105
+ <ControlTemplate TargetType="{x:Type CalendarDayButton}">
106
+
107
+ <Border x:Name="MyHoverButtonBorder" BorderThickness="0.1">
108
+
109
+ <ContentPresenter/>
110
+
111
+ </Border>
112
+
113
+ <ControlTemplate.Triggers>
114
+
115
+ <!-- マウスオーバー -->
116
+
117
+ <Trigger Property="IsMouseOver" Value="True">
118
+
119
+ <Setter TargetName="MyHoverButtonBorder" Property="BorderBrush" Value="Pink" />
120
+
121
+ <Setter TargetName="MyHoverButtonBorder" Property="Background" Value="Pink" />
122
+
123
+ <Setter Property="Foreground" Value="White" />
124
+
125
+ </Trigger>
126
+
127
+ </ControlTemplate.Triggers>
128
+
129
+ </ControlTemplate>
130
+
131
+ </Setter.Value>
132
+
133
+ </Setter>
134
+
135
+ </Style>
136
+
137
+ </Calendar.CalendarDayButtonStyle>
138
+
139
+ </Calendar>
140
+
141
+ </Viewbox>
142
+
143
+ ```
144
+
145
+ 日をクリックすると背景をグリーン色にしているのですが、事情により
146
+
147
+ 月が変わるたびに全ての日の背景を一度ホワイト色でクリアする必要があります。
148
+
149
+ クリアはコードビハインドで行っていますが、そうするとマウスホバー時に上記の
150
+
151
+ XAMLで指定したピンク色にはならずホワイト色のままになってしまいます。
152
+
153
+ ホワイト色でクリアした後でも個々の日をマウスホバー時にピンク色にすることは
154
+
155
+ 可能でしょうか?