管理されたカスタムWindows8コントロールで作業しているときに、「壊滅的な障害」の例外に苦しんでいましたが、問題を非常に単純なテストケースにローカライズすることができました。そして今、私は立ち往生しています。
次のように列挙が定義されているとします。
public enum Modes
{
Mode1,
Mode2
}
次に、このように定義された依存関係プロパティを持つカスタムコントロールがあります
public Modes Mode
{
get { return (Modes)GetValue(ModeProperty); }
set { SetValue(ModeProperty, value); }
}
// Using a DependencyProperty as the backing store for Mode. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ModeProperty =
DependencyProperty.Register("Mode", typeof(Modes), typeof(CustomControl1), new PropertyMetadata(Modes.Mode1));
そして、次のようにVisualStateを介してプロパティをMode1からMode2に切り替えようとします。
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="VisualStateGroup">
<VisualState x:Name="VisualState">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(CustomControl1.Mode)" Storyboard.TargetName="customControl1">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<local:Modes>Mode2</local:Modes>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
これを行うには、ボタンがクリックされたときにGoToState()を呼び出すだけです。
private void Button_Click_1(object sender, RoutedEventArgs e)
{
VisualStateManager.GoToState(this, "VisualState", false);
}
そして、悪名高い「壊滅的な失敗(HRESULTからの例外:0x8000FFFF(E_UNEXPECTED))」が発生します。
Silverlightでまったく同じテストケースを作成しようとしましたが、問題なく動作します。これはWindows8XAML RCのバグですか、それとも何か問題がありますか?