2 つの主要な状態を持つことができるコントロールを設計しています。状態は、依存プロパティを介して設定されます。XAML 経由でプロパティを設定したいと思います。ここで説明されているように、XAML 経由で設定されている場合、セッターは setValue コードのみを実行することを知っています: WPF: XAML プロパティ宣言がセッター経由で設定されていませんか?
そこで、DependencyPropertyChangedEvent イベントを設定しようとしましたが、コードを実行すると次のエラーが発生します。
XamlParseException Occurred
'The invocation of the constructor on type 'RouteOneClient.VehicleInfoControl'
that matches the specified binding constraints threw an exception.' Line number
'134' and line position '34'.
それを調べると、イベントでコントロールの新しいインスタンスを作成できないことがわかります。C# ロジックは次のようになります。
public enum VehicleType
{
Sale = 1,
Trade = 2,
}
public static readonly DependencyProperty VehicleTypeProperty = DependencyProperty.Register(
"VehicleTYPE",
typeof(VehicleType),
typeof(VehicleInfoControl),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender, new PropertyChangedCallback(OnVehTypeChanged))); // optionally metadata for defaults etc.
public VehicleInfoControl()
{
InitializeComponent();
}
public VehicleType VehicleTYPE
{
get { return (VehicleType)GetValue(VehicleTypeProperty); }
set
{
SetValue(VehicleTypeProperty, value);
}
}
private static void OnVehTypeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
VehicleInfoControl instance = d as VehicleInfoControl;
if (instance.VehicleTYPE == VehicleType.Sale)
{
instance.TitleLabel.Content = "Sale Vehicle";
instance.IntendedUse.Visibility = System.Windows.Visibility.Visible;
instance.VehicleNewUsed.Visibility = System.Windows.Visibility.Visible;
instance.VehicleVin.Visibility = System.Windows.Visibility.Visible;
instance.VehicleInceptionMiles.Visibility = System.Windows.Visibility.Visible;
instance.IntendedUseLabel.Visibility = System.Windows.Visibility.Visible;
instance.VehicleNewUsedLabel.Visibility = System.Windows.Visibility.Visible;
instance.VehicleVinLabel.Visibility = System.Windows.Visibility.Visible;
instance.VehicleInceptionMilesLabel.Visibility = System.Windows.Visibility.Visible;
}
else
{
instance.TitleLabel.Content = "Trade Vehicle";
instance.IntendedUse.Visibility = System.Windows.Visibility.Hidden;
instance.VehicleNewUsed.Visibility = System.Windows.Visibility.Hidden;
instance.VehicleVin.Visibility = System.Windows.Visibility.Hidden;
instance.VehicleInceptionMiles.Visibility = System.Windows.Visibility.Hidden;
instance.IntendedUseLabel.Visibility = System.Windows.Visibility.Hidden;
instance.VehicleNewUsedLabel.Visibility = System.Windows.Visibility.Hidden;
instance.VehicleVinLabel.Visibility = System.Windows.Visibility.Hidden;
instance.VehicleInceptionMilesLabel.Visibility = System.Windows.Visibility.Hidden;
}
}
そしてXAML:
<Expander Header="Vehicle Information" Width="Auto" Height="Auto" Grid.Row="2">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width=".3*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<custom:VehicleInfoControl x:Name="SaleVeh" Width="Auto" Height="Auto" Grid.Column="0" VehicleTYPE="Sale"/>
<custom:VehicleInfoControl x:Name="TradeVeh" Width="Auto" Height="Auto" Grid.Column="2" VehicleTYPE="Trade"/>
</Grid>
</Expander>
上記のエラーは、行を指しています。
フォームを正しくフォローしているように感じますが、実行されていません。何か案は?