これを単純なテストケースに減らすことができました。を使用して、この XAML の解析中に例外がスローされますXamlReader.Parse()
。
<DockPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DockPanel.Resources>
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="IsReadOnly" Value="True">
<Setter Property="Background" Value="#FFEEEEEE" />
</Trigger>
</Style.Triggers>
</Style>
</DockPanel.Resources>
<TextBox IsReadOnly="True" />
</DockPanel>
例外メッセージは次のとおりです。
不明なメンバー 'System.Windows.Controls.TextBox.IsReadOnly' を設定できません。行番号「13」と行位置「11」。
IsReadOnly
に設定しないとTextBox
、問題なく解析されます。スタイルトリガーを削除しても、うまく解析されます。
誰でもこれに光を当てることができますか?私はWPFにかなり慣れていません。
更新:
これを再現するために使用している単体テストは次のとおりです(私のPCでは失敗しています):
[TestMethod]
public void TestIsReadOnlyOnTextBox()
{
// Arrange
var xaml =
@"<DockPanel xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"">
<DockPanel.Resources>
<Style TargetType=""TextBox"">
<Style.Triggers>
<Trigger Property=""IsReadOnly"" Value=""True"">
<Setter Property=""Background"" Value=""#FFEEEEEE"" />
</Trigger>
</Style.Triggers>
</Style>
</DockPanel.Resources>
<TextBox IsReadOnly=""True"" />
</DockPanel>
";
// Act
try {
var root = XamlReader.Parse(xaml);
}
catch (XamlParseException ex) {
Assert.Fail(ex.Message);
}
// If we get here, test passes
}
更新 2:
私はもともと、PresentationFramework v4.0.30319 だけを参照していました。PresentationCore、System.Xaml、および WindowsBase への参照を追加しても効果はありません。
プロジェクトの .NET バージョンは 4 です (フル、クライアント プロファイルではありません)。
更新 3:
Arg、これは ExpressionBlend 3.0.1927.0 および XamlPadX 4 で正常に動作しXamlReader.Parse()
ますXamlReader.Load()
。