CustomControlLibrary的Generic.xaml中的ResourceDictionary生成错误

时间:2016-05-09 08:25:18

标签: wpf xaml

我正在制作带有一些自定义控件的WPF-CustomControlLibrary-Project。 其中一个是带有TextWrapping嵌套TextBlock的Label。 当我设置DependencyProperty Horizo​​ntalContentAlignement p.e.到左边,我希望Textblock的TextAlignment也设置为Left。 所以我在这里的文章中实现了一个转换器类:

Convert HorizontalAlignment to TextAlignment

然后我想在Generic.xaml中使用converter-class。 所以我创建了另一个名为Resources.xaml的ResourceDictionary,它位于我的库的根目录中。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:WpfDesignerCustomControlLibrary">
    <local:HorizontalToTextAlignmentConverter x:Key="h2tAlignmentConverter"/>
</ResourceDictionary>

然后我在Generic.xaml中添加了对字典的引用,并绑定了TextBlock的TextAlignment属性。

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfDesignerCustomControlLibrary">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Resources.xaml"/>
    </ResourceDictionary.MergedDictionaries>

    <!--Style for the CustomControl CustomTextBox-->
    <Style TargetType="{x:Type local:CustomTextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
    </Style>

    <!--Style for the CustomControl CustomLabel-->
    <Style TargetType="{x:Type local:CustomLabel}" BasedOn="{StaticResource {x:Type Label}}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:CustomLabel}">
                    <Border BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                        <Label HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                               VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}">
                            <TextBlock Text="{TemplateBinding Text}"
                                       TextWrapping="Wrap"
                                       TextAlignment="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Label}},
                                Path=HorizontalContentAlignment, Converter={StaticResource h2tAlignmentConverter}}"
                                       TextDecorations="{TemplateBinding TextDecorations}"/>
                        </Label>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

但是,当我启动WPF应用程序时,它使用CustomControlLibrary我得到一条错误消息,而在库的初始化时抛出异常。似乎Source属性存在问题。

我做错了什么?

提前致谢!

2 个答案:

答案 0 :(得分:1)

我仍然建议使用正确的URI表示法,以便路径不会那么容易被破坏。

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/WpfDesignerCustomControlLibrary;component/Resources.xaml"/>
</ResourceDictionary.MergedDictionaries>

答案 1 :(得分:0)

好的,再一次,我自己找到了答案。 这似乎得到了一个新的 - 不幸的 - 我的习惯。

在引用Generic.xaml中的ResourceDictionary时,我犯了一个大错误。

这必须是:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/WpfDesignerCustomControlLibrary;component/Resources.xaml"/>
</ResourceDictionary.MergedDictionaries>