カスタムプロパティをXAML値として設定する方法は?
-
06-07-2019 - |
質問
このライブラリには、カスタムの Color プロパティがあります。 XAMLでこれらのプロパティを次のように使用できるようにしたいのです。
<Style TargetType="{x:Type eg:MyWindow}">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="CustomClass.CustomColorProperty"/>
</Setter.Value>
</Setter>
</Style>
CustomClass を含む名前空間はすでに参照されています。これについてどうすればいいですか?ありがとう。
編集:
CustomClass が静的であることに気付いたので、XAMLでそのインスタンスを作成できません。また、 eg:と入力すると、 CustomClass がインテリセンスに表示されません。インスタンスクラスがあれば、どのソリューションでも機能するはずがありません。この状況の回避策はありますか?
編集2:
これは実際のクラスと名前空間です:
namespace Assergs.Windows
{
public static class OfficeColors
{
public class Background
{
public static Color OfficeColor1 = (Color)ColorConverter.ConvertFromString("#e4e6e8");
public static Color OfficeColor2 = (Color)ColorConverter.ConvertFromString("#dce0ed");
public static Color OfficeColor3 = (Color)ColorConverter.ConvertFromString("#a8c3e0");
}
}
}
そして、これはXAML名前空間です:
xmlns:aw="clr-namespace:Assergs.Windows;assembly=Assergs.Windows"
そして、Zenukaが示唆するように、この行を使用する場合:
<SolidColorBrush Color="{x:Static aw:OfficeColors.Background.OfficeColor1}"/>
コンパイル時にこのエラーがスローされます:
Cannot find the type 'OfficeColors.Background'. Note that type names are case sensitive.
解決
これを使用:
<SolidColorBrush Color="{x:Static aw:OfficeColors+Background.OfficeColor1}"/>
ネストされたクラスを参照するには、ドットではなく+記号に注意してください
他のヒント
CustomClassにStaticプロパティがあると仮定していますか? 次に使用できます:
<SolidColorBrush Color="{x:Static eg:CustomClass.CustomColorProperty}"/>
ただし、ネームスペースプレフィックスを変更する必要がある場合があります...
編集:
問題は、あるクラスを別のクラスで宣言しているためです...
クラスBackgroudをOfficeColorsクラスの外に移動して静的に宣言するか、BackgroundクラスのプロパティをOfficeColorsクラスに移動するか(Backgroundプレフィックスを付けて)、または名前空間を使用することをお勧めします。
楽しんでください:)
EDIT2:
ネストされたクラスを参照するには、+記号「aw:OfficeColors + Background.OfficeColor1」を使用してNirのメソッドを使用します。
クラスのインスタンスをリソースの1つとして宣言する必要があります。 (CustomColorPropertyが静的ではないと仮定)
<CustomNamespace.CustomClass x:Key=CcInstance />
<Style TargetType="{x:Type eg:MyWindow}">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="{Binding Source={StaticResource CcInstance}, Path=CustomColorProperty} />
</Setter.Value>
</Setter>
</Style>