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

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

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

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

WPF

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

Q&A

解決済

1回答

1486閲覧

【WPF(C#)】ControlTemplateを設定した場合、Blackout機能の×マークが表示されない

k_mail

総合スコア90

C#

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

WPF

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

1グッド

0クリップ

投稿2023/04/15 14:26

編集2023/04/16 03:33

実現したいこと

ControlTemplateを設定した場合でも、Blackout機能の×マークが表示させたい

前提

下記のサイトを参考にカレンダーを自作しています。
https://qiita.com/pregum/items/775b24fbf2eb80e43991

発生している問題・エラーメッセージ

xaml

xml

1 <Calendar x:Name="rootCalendar" HorizontalAlignment="Center" Language="ja-JP" VerticalAlignment="Center" Margin="5" > 2 <Calendar.Background>White</Calendar.Background> 3 <Calendar.CalendarDayButtonStyle> 4 <Style TargetType="{x:Type CalendarDayButton}"> 5 <Setter Property="Template"> 6 <Setter.Value> 7 <ControlTemplate TargetType="{x:Type CalendarDayButton}"> 8 <Grid Background="White"> 9 <Border BorderThickness="1" BorderBrush="Turquoise"> 10 <StackPanel MinHeight="80" MinWidth="80" > 11 <TextBlock Text="{Binding StringFormat={}{0:dd}}" Margin="2" FontSize="16"/> 12 <ItemsControl > 13 <ItemsControl.ItemsPanel> 14 <ItemsPanelTemplate> 15 <WrapPanel Margin="2" /> 16 </ItemsPanelTemplate> 17 </ItemsControl.ItemsPanel> 18 </ItemsControl> 19 </StackPanel> 20 </Border> 21 </Grid> 22 </ControlTemplate> 23 </Setter.Value> 24 </Setter> 25 </Style> 26 </Calendar.CalendarDayButtonStyle> 27 </Calendar>

試したこと

ControlTemplateを利用して設定した場合、
過去を選択不可能にする「calendar.BlackoutDates.AddDatesInPast();」機能である×マークが表示が表示されなくなりました。
選択不可である機能は有効でした。

①カレンダーコントロールのloadedメソッド内で
SelectedDates.AddRangeで日付を追加しても×マークは表示されませんでした。

②ControlTemplate内のTrigger部分に下記を追加してみたが、StartDateとEndDateでエラーになります。
エラー内容
「メンバー"StartDate"が認識されていないか、アクセスできません。」
「メンバー"EndDate"が認識されていないか、アクセスできません。」
<ControlTemplate.Triggers>
<Trigger Property="IsBlackedOut" Value="True">
<Setter Property="StartDate" Value="2000/01/01"/>
<Setter Property="EndDate" Value="2023/04/14"/>
</Trigger>
</ControlTemplate.Triggers>

補足情報(FW/ツールのバージョンなど)

Windows 10 の VisualStudio 2019 で
WPF アプリをターゲットフレームワーク .NET Framework 4.8

TN8001👍を押しています

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2023/04/15 21:45

開発環境を質問欄を編集して追記してください。(例: Windows 10 の Visual Studio 2022 で WPF アプリをターゲットフレームワーク .NET Framework 4.8 で作っています・・・とか)
k_mail

2023/04/16 03:34

ご指摘ありがとうございます。 補足情報欄に追記しました。
guest

回答1

0

ベストアンサー

ControlTemplateを設定した場合

デフォルトのCalendarDayButtonのテンプレートはもっと複雑です。
ブラックアウトだけでなく、選択や今日の日付等の表現も含まれています。
カレンダーのスタイルとテンプレート - WPF .NET Framework | Microsoft Learn

WPFのCalendarコントロールをカスタマイズ - やる気駆動型エンジニアの備忘録

デフォルトのスタイルを改造していくのをお勧めします。
デザイナ上でCalendarを右クリックし、「追加テンプレートの編集」-「CalendarDayButtonStyle の編集」-「コピーして編集...」とすると出力できます。

Blackout機能の×マークが表示させたい

×マークをテンプレート内に用意して、OpacityVisibilityを変化させます。

xml

1<Window 2 x:Class="Qte7s6py4gr7exj.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 Width="850" 6 SizeToContent="Height"> 7 <Window.Resources> 8 <!-- 9 デザイナ上で`Calendar`を右クリックし、「追加テンプレートの編集」- 10 「CalendarDayButtonStyle の編集」-「コピーして編集...」とすると出力される 11 --> 12 <Style x:Key="CalendarCalendarDayButtonStyle1" TargetType="{x:Type CalendarDayButton}"> 13 <Setter Property="MinWidth" Value="5" /> 14 <Setter Property="MinHeight" Value="5" /> 15 <Setter Property="FontSize" Value="10" /> 16 <Setter Property="HorizontalContentAlignment" Value="Center" /> 17 <Setter Property="VerticalContentAlignment" Value="Center" /> 18 <Setter Property="Template"> 19 <Setter.Value> 20 <ControlTemplate TargetType="{x:Type CalendarDayButton}"> 21 <!-- クソ長いので省略 --> 22 </ControlTemplate> 23 </Setter.Value> 24 </Setter> 25 </Style> 26 </Window.Resources> 27 <Grid> 28 <Grid.ColumnDefinitions> 29 <ColumnDefinition Width="Auto" /> 30 <ColumnDefinition /> 31 </Grid.ColumnDefinitions> 32 33 <Calendar 34 x:Name="customCalendar" 35 Background="White" 36 Language="ja-JP"> 37 <Calendar.CalendarDayButtonStyle> 38 <Style TargetType="{x:Type CalendarDayButton}"> 39 <Setter Property="Template"> 40 <Setter.Value> 41 <ControlTemplate TargetType="{x:Type CalendarDayButton}"> 42 <Grid Background="White"> 43 <Border BorderBrush="Turquoise" BorderThickness="1"> 44 <StackPanel MinWidth="80" MinHeight="80"> 45 <TextBlock 46 Margin="2" 47 FontSize="16" 48 Text="{Binding StringFormat={}{0:dd}}" /> 49 <ItemsControl> 50 <ItemsControl.ItemsPanel> 51 <ItemsPanelTemplate> 52 <WrapPanel Margin="2" /> 53 </ItemsPanelTemplate> 54 </ItemsControl.ItemsPanel> 55 </ItemsControl> 56 </StackPanel> 57 </Border> 58 <Path 59 x:Name="Blackout" 60 Margin="3" 61 HorizontalAlignment="Stretch" 62 VerticalAlignment="Stretch" 63 Data="M8.1772461,11.029181 L10.433105,11.029181 L11.700684,12.801641 L12.973633,11.029181 L15.191895,11.029181 L12.844727,13.999395 L15.21875,17.060919 L12.962891,17.060919 L11.673828,15.256231 L10.352539,17.060919 L8.1396484,17.060919 L10.519043,14.042364 z" 64 Fill="#FF000000" 65 Opacity="0" 66 RenderTransformOrigin="0.5,0.5" 67 Stretch="Fill" /> 68 </Grid> 69 <ControlTemplate.Triggers> 70 <Trigger Property="IsBlackedOut" Value="True"> 71 <Setter TargetName="Blackout" Property="Opacity" Value="0.2" /> 72 </Trigger> 73 </ControlTemplate.Triggers> 74 </ControlTemplate> 75 </Setter.Value> 76 </Setter> 77 </Style> 78 </Calendar.CalendarDayButtonStyle> 79 </Calendar> 80 81 <Calendar 82 x:Name="normalCalendar" 83 Grid.Column="1" 84 CalendarDayButtonStyle="{DynamicResource CalendarCalendarDayButtonStyle1}" /> 85 </Grid> 86</Window>

cs

1using System.Windows; 2 3namespace Qte7s6py4gr7exj 4{ 5 public partial class MainWindow : Window 6 { 7 public MainWindow() 8 { 9 InitializeComponent(); 10 11 normalCalendar.BlackoutDates.AddDatesInPast(); 12 customCalendar.BlackoutDates.AddDatesInPast(); 13 } 14 } 15}

アプリ画像

投稿2023/04/15 21:44

編集2023/04/16 03:39
TN8001

総合スコア9862

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

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

k_mail

2023/04/16 03:23

ご回答ありがとうございます。 現在出先のため、帰ってから確認させて頂きます。
k_mail

2023/04/16 23:40

ありがとうございます! Blackout機能実装できました! 当日日付も強調したかったのですが、 そちらも実装できました! 大変勉強になり、助かりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問