App.xaml风格不能在Usercontrol中使用,怎么来的?

时间:2009-10-19 15:56:02

标签: wpf xaml user-controls styles

我在app.xaml中设置了一个文本块样式,然后将其应用于我的应用程序中的文本块并且工作正常。

但是我收到一个错误:“无法创建类型的实例”如果我将此样式应用于我的用户控件中的文本块,为什么这是一个问题?

<UserControl x:Class="Client.Usercontrols.MyButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" MinHeight="30" MinWidth="40"
DataContext="{Binding RelativeSource={RelativeSource Self}}">

<Button Width="Auto" HorizontalAlignment="Center">

    <Border CornerRadius="5" BorderThickness="1" BorderBrush="Transparent" >
        <Grid>
            <Image Name="tehImage" Source="{Binding ImageSource}" />
            <TextBlock Name="tehText" Text="{Binding Text}" 
                Style="{StaticResource ButtonText}" /> <-- This causes error
        </Grid>
    </Border>

</Button>

谢谢, 钢钣

- App.Xaml代码 -

<Application x:Class="Client.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="Mainpage.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Styles/CascadingStyles.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

- CascadingStyles.Xaml -

 <Style TargetType="{x:Type TextBlock}" x:Key="ButtonText" >
    <Setter Property="FontSize" Value="10" />
    <Setter Property="VerticalAlignment" Value="Bottom" />
    <Setter Property="HorizontalAlignment" Value="Center" />
    <Setter Property="FontFamily" Value="Lucida Sans Unicode" />
    <Setter Property="Foreground" Value="#0F004E" />
 </Style>

3 个答案:

答案 0 :(得分:10)

基本上,它找不到StaticResource,因为它不在您的用户控件的文件中。 UserControl.xaml对App.xaml一无所知。

您应该使用DynamicResource,这样它将在运行时应用。

答案 1 :(得分:4)

之前的回答绝对不正确。您绝对可以在应用程序级别定义资源,并从UserControls中引用它们。实际上,这通常可以提高性能以防止资源重复。如this page中“静态资源查找行为”标题下所述,在静态资源列表中第3次检查应用程序资源。

我猜你有一个错字或其他一些问题导致你的错误。你可以发布app.xaml代码吗?

答案 2 :(得分:0)

我在这样的问题上已经失去了几个小时,但它只适用于Expression Blend 4。

如本博文中所述:

http://blogs.msdn.com/b/unnir/archive/2009/03/31/blend-wpf-and-resource-references.aspx

Expression将尝试使用 Blend Application.Resources而不是您的应用程序 Application.Resources来解析StaticResources。这似乎仍然发生在Blend 4.0.30422.0