WPF にカスタム コントロールがあります。次のような 2 つの単純な CLR プロパティを追加しました。
private int _ChordFrom = 0;
public int ChordFrom
{
get { return _ChordFrom; }
set { _ChordFrom = value; }
}
private int _ChordTo = 0;
public int ChordTo
{
get { return _ChordTo; }
set { _ChordTo = value; }
}
これらのプロパティを他の依存関係にバインドしたくないため、単純な CLR プロパティを使用します。コントロールがインスタンス化されるときに、XAML 内に値を設定したいだけです。
XAML 内では、プロパティは IntelliSense によって検出されますが、プロジェクトをビルドするとエラーが発生します。
「メンバー「ChordFrom」が認識されていないか、アクセスできません。」「メンバー「ChordTo」が認識されていないか、アクセスできません。」
XAML コードは次のようになります。
<TabItem Header="CHORDS I">
<Grid x:Name="_gridChords_1" Background="AliceBlue">
<mg:MidiChordGrid x:Name="gridMidiChordGrid_1" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ChordFrom="0" ChordTo="7"/>
</Grid>
</TabItem>
気になる点は以下の3点です。
アクセスできないのに、Intellisense が XAML 内のプロパティを提供するのはなぜですか?
すべての XAML ウィンドウを閉じてプロジェクトを再構築すると、エラーが消えます。
プロジェクトをエラーなくビルドできても、プロパティが設定されていません。
答え | 答え | 答え | 答え | 答え | 答え | 答え
すべての回答に感謝しますが、解決策/エラーは私のコード内にありました。これら 2 つの CLR プロパティを設定した後、グリッドを更新するのを忘れていました。申し訳ありません。
しかし、ここであなたが知りたいかもしれないいくつかの事実:
- WPF XAML 内でプレーンな CLR プロパティを使用および設定できます。私はそれをチェックアウトし、プロパティはXAMLから設定されています
- プロジェクトはビルド可能であるため、「認識されていないか、アクセスできません」というエラーはVSのバグのようです
- VS 内の XAML ファイルを閉じると、ビルド エラーは発生しなくなります。
コントロールに渡す値はコントロールのインスタンスごとにハードコードされており、実行時に変更されないため、現時点では単純な CLR プロパティを使用することが最善の解決策です。もちろん、実行時に値が変更された場合は、添付された DP を使用したいと思いますが、そうではありません。
素早い回答ありがとうございますが、最終的には私のせいでした。