在Visual State中使用Staticresouce会导致Blend Designer中断:"属性值无效属性背景"

时间:2015-08-17 10:08:43

标签: xaml designer blend uwp visualstates

我试图通过使用Visual State和Staticresouce作为Visual State的Setter中的值来更改Grid的背景。它在运行时工作正常,但设计师显示以下错误(这对我没有多大帮助):

异常: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(Object object)    在Microsoft.VisualStudio.DesignTools.WindowsXamlDesigner.Views.WindowsUIXamlImageHost.RenderScheduler.b__26_0(对象o)    在System.Windows.Threading.ExceptionWrapper.InternalRealCall(委托回调,对象args,Int32 numArgs)    at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source,Delegate callback,Object args,Int32 numArgs,Delegate catchHandler)

属性值无效属性背景未知。 InnerException:无

这就是我的尝试:

<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>

enter image description here

1 个答案:

答案 0 :(得分:0)

当前的 Blend 非常错误,所以如果你看到这样的错误,我也不会感到惊讶。

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

enter image description here

通过这样做,混合将在项目属性下生成 DesignTimeResources.xaml 文件,它应该消除设计者的错误。

但是,我也注意到您的<ResourceDictionary.MergedDictionaries>未包含在<ResourceDictionary>内。难道不应该是这样的instread吗?

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

更新

这确实是一个混合错误,甚至可以在内置资源中发生。要复制,请尝试构建项目,然后转到 States 选项卡,并在看到Blend Designer崩溃后立即选择VisualState。请注意,我已在XAML Designer(如果支持)中关闭运行项目代码。

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