我正在制作带有一些自定义控件的WPF-CustomControlLibrary-Project。 其中一个是带有TextWrapping嵌套TextBlock的Label。 当我设置DependencyProperty HorizontalContentAlignement 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属性存在问题。
我做错了什么?
提前致谢!
答案 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>