檢查以下情形(其他人可能也適用),你可以創建項目只需複印件粘貼在這裏的代碼在正確的文件]:Visual Studio WPF設計器中的錯誤?
一個 - 建立一個具有基本的東西(Resources.xaml)ResourceDictionary中:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush Color="Red" x:Key="Test" />
<Style TargetType="{x:Type GroupBox}" x:Key="Test2" >
<Setter Property="Background" Value="Blue" />
</Style>
<Style TargetType="{x:Type TextBlock}" >
<Setter Property="Foreground" Value="Green" />
</Style>
</ResourceDictionary>
b - 創建用戶控制基站在別人將繼承含有基本資源(UserControlBase.cs):
using System.Windows.Controls;
using System;
using System.Windows;
namespace ResourceTest
{
public class UserControlBase : UserControl
{
public UserControlBase()
{
this.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("ResourceTest;component/Resources.xaml", UriKind.RelativeOrAbsolute) });
}
}
}
ç - 創建一個用戶控件從基部繼承(UserControl1.xaml):
<ResourceTest:UserControlBase x:Class="ResourceTest.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ResourceTest="clr-namespace:ResourceTest"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="300" >
<Grid>
<GroupBox BorderBrush="{StaticResource Test}" Margin="3" Header="Test" Style="{DynamicResource Test2}" >
<TextBlock Text="TESTTEST" />
</GroupBox>
</Grid>
</ResourceTest:UserControlBase>
結果:StaticResources得不到解決(並沒有加載測試BorderBrush)。 DynamicResources已解決(背景爲藍色),但設計人員說它無論如何都找不到資源(第一次工作正常,但是當您打開/關閉設計器時,資源無法解析)。非命名資源,如TextBlock樣式工作正常。
這是一個設計師錯誤還是我做錯了什麼?在資源永不改變的場景中,必須聲明資源爲動態的嗎?
在此先感謝。
可以將資源聲明爲動態,只是效率不高。如果僅在此處使用此ResourceDictionary,是否嘗試將它添加到基類的XAML前端中的'UserControl.Resources'中,以查看其行爲是否有所不同? –
@WillEddins:在我真正的應用程序中,資源被設置在一個基本的UserControl上,因此每個控件都有必要的資源,以便在WPF設計器上正確地看到它(否則這些樣式僅應用於運行時,並且我們無法進行適當的UI設計,除非啓動每次更改的應用程序:S)。 –