5

I create a attach property for my RadButton to set a image inside Button content But i get this exception in design time in Visual Studio 2010. In Blend 4 i does not show any error and at Run time it`s working fine.

Attach Property :

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}"/>

Exception Detail :

  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)

Where i am doing wrong ?

Thank `s for help.

Hasanuzzaman
  • 1,822
  • 5
  • 36
  • 54
  • I also have this issue in V2012.3. The issue is that the XAML parser in VS does not approve of the parenthesis in the Path, even though it does work when compiled. – tofutim May 15 '13 at 14:59
  • In my case it is: sllb:SearchTextBox.FilteredFieldNames="{Binding (sllb:SearchTextBox.FilteredFieldNames), RelativeSource={RelativeSource TemplatedParent}}" - the parentheses are the issue and must some how be escaped to work. – tofutim May 15 '13 at 15:05
  • 1
    @tofutim Does it stop giving you design-time errors if you just add `Path=` to your binding, like [this answer suggests](http://stackoverflow.com/a/5832247/302677)? – Rachel May 15 '13 at 15:08
  • @Rachel It works! (I just had to rebuild to see the change.) – tofutim May 15 '13 at 15:25
  • @Rachel You should write up the solution. – tofutim May 15 '13 at 15:32
  • @tofutim Sure, it's posted below :) – Rachel May 15 '13 at 15:41
  • Actually, now it doesn't work again. I might have just fooled myself by forgetting to uncomment out the Style code. – tofutim May 15 '13 at 17:56
  • I think I might have another error happening here. – tofutim May 15 '13 at 18:14
  • @tofutim Perhaps you should post a new question with your problem, since it doesn't appear to be the same as this one? – Rachel May 16 '13 at 17:58

1 Answers1

8

When binding to an attached property in WPF 4.0 or below, you have to actually use the Path property to avoid getting design-time errors.

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

The Path property is not needed in WPF 4.5 and above.

Rachel
  • 130,264
  • 66
  • 304
  • 490
  • I Agree. From a clarity standpoint, the code is better in this instance if you include the `Path=` anyway. Give her the bounty! – Rob Perkins May 16 '13 at 17:51