前提・実現したいこと
カスタムコントロール"Hoge"があり、"Hoge"には"Piyo"という依存関係プロパティがあります。
カスタムシェーダエフェクト"CustomShaderEffect"があり、"CustomShaderEffect"には"Fuga"という、ピクセルシェーダ定数と紐づけられた依存関係プロパティがあります。
"Hoge"のテンプレートには"CustomShaderEffect"を付けたBorderを入れており、"Fuga"には"Piyo"がバインドされています。
値は正常に反映され、ライブプロパティエクスプローラでもそれが確認できますが、バインドエラーが発生します。
動作には問題ありませんが、バインドエラーを消すにはどうすればいいのかご教授ください。
発生している問題・エラーメッセージ
XAMLバインドエラー
重大度レベル | カウント | データ コンテキスト | バインド パス | ターゲット | ターゲット型 | 説明 |
---|---|---|---|---|---|---|
エラー | 1 | null | Piyo | CustomShaderEffect.Fuga | Double | ターゲット要素の管理 FrameworkElement または FrameworkContentElement が見つかりません。 |
該当のソースコード
C#
1public class Hoge : Control 2{ 3 static Hoge() 4 { 5 DefaultStyleKeyProperty.OverrideMetadata(typeof(Hoge), new FrameworkPropertyMetadata(typeof(Hoge))); 6 } 7 8 #region == Piyo == 9 10 public static readonly DependencyProperty PiyoProperty = DependencyProperty.Register("Piyo", typeof(double), typeof(Hoge), new PropertyMetadata(0d)); 11 public double Piyo { get => (double)GetValue(PiyoProperty); set => SetValue(PiyoProperty, value); } 12 13 #endregion 14}
C#
1public class CustomShaderEffect : ShaderEffect 2{ 3 ... 4 5 #region == Fuga == 6 7 public static readonly DependencyProperty FugaProperty = DependencyProperty.Register("Fuga", typeof(double), typeof(CustomShaderEffect), new PropertyMetadata(0d, PixelShaderConstantCallback(0))); 8 public double Fuga { get => (double)GetValue(FugaProperty); set => SetValue(FugaProperty, value); } 9 10 #endregion 11}
XAML
1<ControlTemplate TargetType="{x:Type local:Hoge}"> 2 <Border Background="{TemplateBinding Background}" 3 BorderBrush="{TemplateBinding BorderBrush}" 4 BorderThickness="{TemplateBinding BorderThickness}"> 5 <Border.Effect> 6 <local:CustomShaderEffect Fuga="{Binding Piyo, RelativeSource={RelativeSource Mode=TemplatedParent}, Mode=OneWay}"/> 7 </Border.Effect> 8 </Border> 9</ControlTemplate>
試したこと
XAML
1<local:CustomShaderEffect Fuga="{Binding Piyo, RelativeSource={RelativeSource Mode=TemplatedParent}, Mode=OneWay}"/>
この部分を
XAML
1<local:CustomShaderEffect Fuga="{TemplateBinding Piyo}"/>
に変えるとバインドエラーは発生しなくなりますが、値が反映されなくなります。
補足情報(FW/ツールのバージョンなど)
Visual Studio Community 2019 16.9.3, .Net 5.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/11 10:45