c# - 未能从文本 'Path' 创建 '(RadButtonOnImage:RadButtonImage.Image)'

标签 c# .net wpf xaml telerik

我为我的 RadButton 创建了一个附加属性以在按钮内容中设置图像但是我在 Visual Studio 2010 的设计时遇到了这个异常。在 Blend 4 中我没有显示任何错误并且在运行时它工作正常。

附加属性:

namespace SmartSoft.GTS.RadButton
{
public class RadButtonImage
{
     public static readonly DependencyProperty ImagePropery;
     public static ImageSource GetImage(DependencyObject obj)
     {
         return (ImageSource)obj.GetValue(ImagePropery);
     }
     public static void SetImage(DependencyObject obj,ImageSource Value)
     {
         obj.SetValue(ImagePropery,Value);
     }
     static RadButtonImage()
     {
         ImagePropery = DependencyProperty.RegisterAttached("Image", typeof(ImageSource), typeof(RadButtonImage), new PropertyMetadata((ImageSource)null));
     }
   }
}

XAML:

  xmlns:RadButtonOnImage="clr-namespace:SmartSoft.GTS.RadButton"

    <Style x:Key="ImageOnRadButton" TargetType="{x:Type telerik:RadButton}">
        <Setter Property="FontSize" Value="13.333"/>
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Image Margin="5,0,5,0" HorizontalAlignment="Center" VerticalAlignment="Center"  Source="{Binding (RadButtonOnImage:RadButtonImage.Image), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerik:RadButton}}}"/>
                        <TextBlock Text="{TemplateBinding Content}" TextAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,0,5,0"/>
                    </StackPanel>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>

  <telerik:RadButton Content="New" RadButtonOnImage:RadButtonImage.Image="Images/Buttons/Clear.png" Style="{DynamicResource ImageOnRadButton}"/>

异常详细信息:

  System.Reflection.TargetInvocationException
 Exception has been thrown by the target of an invocation.
 at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
 at System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
 at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
 at System.Delegate.DynamicInvokeImpl(Object[] args)
 at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
 at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)


 System.Windows.Markup.XamlParseException
 Failed to create a 'Path' from the text '(RadButtonOnImage:RadButtonImage.Image)'.
 at System.Windows.Markup.XamlReader.RewrapException(Exception e, Uri baseUri)
 at System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlReader templateReader, XamlObjectWriter currentWriter)
 at System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlObjectWriter objectWriter)
 at System.Windows.FrameworkTemplate.LoadOptimizedTemplateContent(DependencyObject container, IComponentConnector componentConnector, IStyleConnector styleConnector, List`1 affectedChildren, UncommonField`1 templatedNonFeChildrenField)
 at System.Windows.FrameworkTemplate.LoadContent(DependencyObject container, List`1 affectedChildren)
 at System.Windows.StyleHelper.ApplyTemplateContent(UncommonField`1 dataField, DependencyObject container, FrameworkElementFactory templateRoot, Int32 lastChildIndex, HybridDictionary childIndexFromChildID, FrameworkTemplate frameworkTemplate)
 at System.Windows.FrameworkTemplate.ApplyTemplateContent(UncommonField`1 templateDataField, FrameworkElement container)
 at System.Windows.FrameworkElement.ApplyTemplate()
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.Control.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
 at System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV)
 at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
 at System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV)
 at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
 at System.Windows.Controls.ContentPresenter.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.Border.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.Control.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Documents.AdornerDecorator.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
 at System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV)
 at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.Border.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.Border.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.DockPanel.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.Border.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.Control.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.Border.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at MS.Internal.Designer.ZoomableViewPresenter.DesignerBackground.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.Decorator.MeasureOverride(Size constraint)
 at Microsoft.Windows.Design.Interaction.DesignerView.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at MS.Internal.Designer.Viewport.MeasureOverride(Size availableSize)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
 at System.Windows.Controls.ScrollContentPresenter.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
 at System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV)
 at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.ScrollViewer.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
 at System.Windows.Controls.ContentPresenter.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Controls.Control.MeasureOverride(Size constraint)
 at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
 at System.Windows.UIElement.Measure(Size availableSize)
 at System.Windows.Interop.HwndSource.SetLayoutSize()
 at System.Windows.Interop.HwndSource.set_RootVisualInternal(Visual value)
 at System.Windows.Interop.HwndSource.set_RootVisual(Visual value)
 at MS.Internal.DeferredHwndSource.ProcessQueue(Object sender, EventArgs e)


 System.Xaml.XamlParseException
 Prefix 'RadButtonOnImage' does not map to a namespace.
 at MS.Internal.Xaml.XamlContext.ResolveXamlType(String qName, Boolean skipVisibilityCheck)
 at MS.Internal.Xaml.Context.ObjectWriterContext.ServiceProvider_Resolve(String qName)
 at MS.Internal.Xaml.ServiceProviderContext.System.Windows.Markup.IXamlTypeResolver.Resolve(String qName)
 at System.Windows.PropertyPath.GetTypeFromName(String name, Object context)
 at System.Windows.PropertyPath.ResolvePropertyName(String name, Object item, Type ownerType, Object context, Boolean throwOnError)
 at System.Windows.PropertyPath.ResolvePathParts(ITypeDescriptorContext typeDescriptorContext)
 at System.Windows.PropertyPath.PrepareSourceValueInfo(ITypeDescriptorContext typeDescriptorContext)
 at System.Windows.PropertyPath..ctor(String path, ITypeDescriptorContext typeDescriptorContext)
 at System.Windows.PropertyPathConverter.ConvertFrom(ITypeDescriptorContext typeDescriptorContext, CultureInfo cultureInfo, Object source)
 at MS.Internal.Xaml.Runtime.ClrObjectRuntime.CreateObjectWithTypeConverter(ServiceProviderContext serviceContext, XamlValueConverter`1 ts, Object value)
 at MS.Internal.Xaml.Runtime.ClrObjectRuntime.CreateFromValue(ServiceProviderContext serviceContext, XamlValueConverter`1 ts, Object value, XamlMember property)
 at System.Xaml.XamlObjectWriter.Logic_CreateFromValue(ObjectWriterContext ctx, XamlValueConverter`1 typeConverter, Object value, XamlMember property, String targetName, IAddLineInfo lineInfo)

我哪里做错了?

感谢 `s 的帮助。

最佳答案

在 WPF 4.0 或更低版本中绑定(bind)到附加属性时,您必须实际使用 Path 属性以避免出现设计时错误。

<Image Source="{Binding Path=(RadButtonOnImage:RadButtonImage.Image), ...}" />

WPF 4.5 及更高版本不需要 Path 属性。

关于c# - 未能从文本 'Path' 创建 '(RadButtonOnImage:RadButtonImage.Image)',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9656537/

相关文章:

c# - 如何按键对字典进行排序

c# - 使用 Linq 更新嵌套属性

c# - 可调整大小的窗口上的框架应显示滚动条

sql - 获取SqlException,超时错误

WPF/XAML TreeView 在绑定(bind)后不突出显示节点

wpf - 在另一个 LinearGradientBrush 中使用 LinearGradientBrush?

c# - 如何更新所有 blob 存储文件的 ContentDisposition 属性?

c# - MySQL - 升级主键?

c# - EF Core .ThenInclude 不包含外部实体并导致查询检索不到任何内容

c# - MemoryCache绝对过期和内存限制