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

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

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

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

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

WPF

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

Q&A

解決済

1回答

12240閲覧

WPFカスタムコントロール継承時のGeneric.xamlの扱いについて

noppuku

総合スコア13

C#

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

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

WPF

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

0グッド

0クリップ

投稿2016/12/15 05:39

###前提・実現したいこと
現在VisuasStudio2013Pro(C#)を使用しWPFカスタムコントロールを作成しています。
やりたいこととしてはTextBoxを継承したコントロールをさらに継承という風に
既存コントロールから継承していくコントロールを作成したいと考えています。

###発生している問題・エラーメッセージ
現状wpfカスタムコントロールライブラリを使用しTextBoxを継承した
ColorTextBoxを作りました。機能としてはフォーカスをテキストボックス
に当てるとCyanに変更するといったものです。(プロパティにより色の選択ができる)
次にこのColorTextBoxを継承したコントロールを作る際なのですが、
C#のコード部分はそのまま継承したものが使えるのは分かります。
しかし、Generic.Xamlの部分をどのように継承・記述をしていけば良いのかが
分かりません。
これから既存コントロールから継承したコントロールを作成し、またそれを
継承という風に作る際にGeneric.xamlをどのように扱っていけば良いのか
Generix.xamlの扱いという漠然とした質問で申し訳ないのですが、
教えていただければと存じます。

###該当のソースコード

C#

1ColorTextBoxと書きましたが実験段階でクラス名をそのままの 2CustomConrol1でやっております。 3分かりにづらく申し訳ないです。 4 5<ResourceDictionary 6 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 7 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 8 xmlns:local="clr-namespace:WpfCustomControlLibrary2"> 9 <Style TargetType="{x:Type local:CustomControl1}" 10 BasedOn="{StaticResource {x:Type TextBox}}" > 11 <Setter Property="Template"> 12 <Setter.Value> 13 <ControlTemplate TargetType="{x:Type local:CustomControl1}"> 14 15 <Border Background="{TemplateBinding Background}" 16 BorderBrush="{TemplateBinding BorderBrush}" 17 BorderThickness="{TemplateBinding BorderThickness}"> 18 <TextBox x:Name="Textbox" Height="{TemplateBinding Height}" 19 Width="{TemplateBinding Width}" 20 Text="{TemplateBinding Text}" 21 /> 22 </Border> 23 </ControlTemplate> 24 </Setter.Value> 25 </Setter> 26 </Style> 27</ResourceDictionary> 28 29public class CustomControl1 : TextBox 30 { 31 static CustomControl1() 32 { 33 DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1))); 34 } 35 36 private TextBox Textbox; 37 38 private void FocusGodColor(object sender, RoutedEventArgs e) 39 { 40 if (Godfocustype == 有無設定.有り) 41 { 42 switch (GodFocusColor) 43 { 44 case ゴットフォーカスの色設定.Cyan: 45 Textbox.Background = new SolidColorBrush(Colors.Cyan); 46 break; 47 case ゴットフォーカスの色設定.Green: 48 Textbox.Background = new SolidColorBrush(Colors.Green); 49 break; 50 case ゴットフォーカスの色設定.Yellow: 51 Textbox.Background = new SolidColorBrush(Colors.Yellow); 52 break; 53 case ゴットフォーカスの色設定.White: 54 Textbox.Background = new SolidColorBrush(Colors.White); 55 break; 56 } 57 } 58 } 59 60 private void FocusLostColor(object sender, RoutedEventArgs e) 61 { 62 if (Lostfocustype == 有無設定.有り) 63 { 64 switch (LostFocusColor) 65 { 66 case ロストフォーカスの色設定.Cyan: 67 Textbox.Background = new SolidColorBrush(Colors.Cyan); 68 break; 69 case ロストフォーカスの色設定.Green: 70 Textbox.Background = new SolidColorBrush(Colors.Green); 71 break; 72 case ロストフォーカスの色設定.Yellow: 73 Textbox.Background = new SolidColorBrush(Colors.Yellow); 74 break; 75 case ロストフォーカスの色設定.White: 76 Textbox.Background = new SolidColorBrush(Colors.White); 77 break; 78 } 79 } 80 } 81 82 83 public override void OnApplyTemplate() 84 { 85 base.OnApplyTemplate(); 86 87 this.Textbox = GetTemplateChild("Textbox") as TextBox; 88 89 if (this.Textbox != null) 90 { 91 this.Textbox.GotFocus += this.FocusGodColor; 92 this.Textbox.LostFocus += this.FocusLostColor; 93 } 94 95 } 96 97 //enum型で有り無しの設定 98 public enum 有無設定 99 { 100 有り, 101 無し 102 } 103 104 //ゴッドフォーカスONOFFプロパティ追加 105 [Browsable(true)] 106 [Category("独自設定")] 107 public 有無設定 Godfocustype { set; get; } 108 109 //ロストフォーカスONOFFプロパティ追加 110 [Browsable(true)] 111 [Category("独自設定")] 112 public 有無設定 Lostfocustype { set; get; } 113 114 //ゴッドフォーカス色設定Enum 115 public enum ゴットフォーカスの色設定 116 { 117 118 Cyan, 119 Green, 120 Yellow, 121 White 122 } 123 124 //ゴッドフォーカス色設定プロパティ 125 [Browsable(true)] 126 [Category("独自設定")] 127 public ゴットフォーカスの色設定 GodFocusColor { set; get; } 128 129 //ロストフォーカス色設定Enum 130 public enum ロストフォーカスの色設定 131 { 132 White, 133 Cyan, 134 Green, 135 Yellow 136 137 } 138 139 //ロストフォーカス色設定プロパティ 140 [Browsable(true)] 141 [Category("独自設定")] 142 public ロストフォーカスの色設定 LostFocusColor { set; get; } 143 144 //エラー時の色設定Enum 145 public enum エラー時の色設定 146 { 147 148 149 red, 150 Green, 151 Yellow, 152 Cyan, 153 White 154 } 155 156 //エラー時の色設定プロパティ 157 [Browsable(true)] 158 [Category("独自設定")] 159 public エラー時の色設定 ErrorColor { set; get; } 160 161 } 162} 163 164 165

###試したこと
上記のCustomControl1を継承したコントロールを作成し、次に数値に特化した
NumberTextBoxを作りたいと考えております。
またTextBoxを継承してつくるのではなく、このCustomControl1の機能を引き継いだ
NumberTextBoxを作成したいと考えております。

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

BaseOnで継承してみてはどうでしょうか

WPFサンプル:定義済みのStyleを継承し新たなStyleを定義する

投稿2016/12/15 07:28

dn315

総合スコア201

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問