在 Visual State 中使用 Staticresouce 会导致 Blend Designer 中断:"Invalid attribute value Unknow for property Background"

Using Staticresouce in Visual State causes Blend Designer to break: "Invalid attribute value Unknow for property Background"

我正在尝试通过使用视觉状态和静态资源作为视觉状态 Setter 中的值来更改网格的背景。它在运行时运行良好,但设计器显示以下错误(对我帮助不大):


例外:Der Text zu diesem Fehlercode wurde nicht gefunden。 (未知错误)

堆栈跟踪: 在 Windows.UI.Xaml.Hosting.XamlUIPresenter.Render() 在 Microsoft.VisualStudio.DesignTools.WindowsXamlDesigner.Views.WindowsUIXamlImageHost.RenderWorker() 在 Microsoft.VisualStudio.DesignTools.WindowsXamlDesigner.Views.WindowsUIXamlImageHost.RenderScheduler.OnRender(对象对象) 在 Microsoft.VisualStudio.DesignTools.WindowsXamlDesigner.Views.WindowsUIXamlImageHost.RenderScheduler.b__26_0(对象 o) 在 System.Windows.Threading.ExceptionWrapper.InternalRealCall(委托回调,对象参数,Int32 numArgs) 在 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(对象源、委托回调、对象参数、Int32 numArgs、委托 catchHandler)

属性 背景未知的无效属性值。 内部异常:None


这是我试过的:

<Grid x:Name="grid">
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="TestGroup">
             <VisualState x:Name="TestState">
                  <VisualState.Setters>
                       <Setter Target="grid.(Panel.Background)" Value="{StaticResource BackgroundBrush}" />
                  </VisualState.Setters>
             </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
</Grid>


<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <SolidColorBrush x:Key="BackgroundBrush" Color="Black"/>
</ResourceDictionary>


<App>
    ...
    <App.Resources>
         <ResourceDictionary>
              <ResourceDictionary.MergedDictionaries>
                   <ResourceDictionary Source="Resources/Test.xaml"/>
              </ResourceDictionary.MergedDictionaries>
         </ResourceDictionary>
    </App.Resources>
</App>

当前的 Blend 确实有问题,所以如果您看到这样的错误,我并不感到惊讶。

一种解决方法是,在 Blend 中重新打开包含此资源的页面。您应该会看到弹出一个对话框(见下图)。然后 select 您的 Test.xaml 文件从 Available dictionaries 下拉列表中点击确定。

通过这样做,blend 将在您的项目 Properties 下生成一个 DesignTimeResources.xaml 文件,它应该会消除错误设计师。


但是,我还注意到您的 <ResourceDictionary.MergedDictionaries> 没有包含在 <ResourceDictionary> 中。不应该是这样的吗?

<App.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Resources/Test.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</App.Resources>

更新

这确实是一个 Blend 错误,甚至在使用内置资源时也会发生。要复制,请尝试构建项目,然后转到 States 选项卡和 select a VisualState,就在您将看到 Blend Designer 崩溃之后。请注意,我在 XAML Designer(如果支持) 中关闭了 运行 项目代码。

目前消除崩溃的唯一方法是重新打开 xaml 文件。