Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prefix 'xcdg' does not map to a namespace

I recently started playing with DataGridControl from Extended WPF Toolkit

<Grid x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource SampleDataSource}}">
    <xcdg:DataGridControl ItemsSource="{Binding Orders}" SelectionMode="Single" >
        <xcdg:DataGridControl.View>
            <xcdg:TableflowView FixedColumnCount="1" UseDefaultHeadersFooters="True" ShowRowSelectorPane="False" VerticalGridLineBrush="Green" VerticalGridLineThickness="2" HorizontalGridLineBrush="Purple" HorizontalGridLineThickness="2">
                <xcdg:TableflowView.Theme>
                    <xcdg:ZuneNormalColorTheme/>
                </xcdg:TableflowView.Theme>
            </xcdg:TableflowView>
        </xcdg:DataGridControl.View>
        <xcdg:DataGridControl.Columns>
            <xcdg:Column FieldName="OrderID" IsMainColumn="True"/>
            <xcdg:Column FieldName="ExternalID" />
            <xcdg:Column FieldName="CustomerName" />
            <xcdg:Column FieldName="Date" />
            <xcdg:Column FieldName="Address" />
            <xcdg:Column FieldName="Items" Width="*" />
        </xcdg:DataGridControl.Columns>
    </xcdg:DataGridControl>
</Grid>

It's ok and everything works. Then I added style.

<Style TargetType="{x:Type xcdg:DataGridControl}">
    <Setter Property="Background" Value="MediumOrchid"/>
</Style>

Style is applied and everything works again. So what I did next was creating CotrolTemplate using Expression Blend and added that template to my Style.

<Style TargetType="{x:Type xcdg:DataGridControl}">
  <Setter Property="Background"
          Value="MediumOrchid" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type xcdg:DataGridControl}">
        <Grid>
          <Border BorderBrush="{TemplateBinding BorderBrush}"
                  BorderThickness="{TemplateBinding BorderThickness}"
                  Background="{TemplateBinding Background}">
            <AdornerDecorator x:Name="PART_DragDropAdornerDecorator">
              <xcdg:TableViewScrollViewer x:Name="PART_ScrollViewer"
                                          Padding="{TemplateBinding Padding}"
                                          RowSelectorPaneWidth="{Binding (xcdg:DataGridControl.DataGridContext).RowSelectorPaneWidth, RelativeSource={RelativeSource Self}}"
                                          ShowRowSelectorPane="{Binding (xcdg:DataGridControl.DataGridContext).ShowRowSelectorPane, RelativeSource={RelativeSource Self}}">
                <xcdg:TableflowViewItemsHost />
              </xcdg:TableViewScrollViewer>
            </AdornerDecorator>
          </Border>
          <Grid x:Name="connectionStateGrid"
                HorizontalAlignment="Right"
                Height="30"
                Margin="0,0,25,25"
                VerticalAlignment="Bottom"
                Width="30">
            <ContentPresenter x:Name="connectionStateLoadingContentPresenter"
                              ContentTemplate="{Binding (xcdg:DataGridControl.DataGridContext).ConnectionStateLoadingGlyph, RelativeSource={RelativeSource Self}}"
                              Content="{TemplateBinding ConnectionState}"
                              Visibility="Collapsed" />
            <ContentPresenter x:Name="connectionStateCommittingContentPresenter"
                              ContentTemplate="{Binding (xcdg:DataGridControl.DataGridContext).ConnectionStateCommittingGlyph, RelativeSource={RelativeSource Self}}"
                              Content="{TemplateBinding ConnectionState}"
                              Visibility="Collapsed" />
            <ContentPresenter x:Name="connectionStateErrorContentPresenter"
                              ContentTemplate="{Binding (xcdg:DataGridControl.DataGridContext).ConnectionStateErrorGlyph, RelativeSource={RelativeSource Self}}"
                              Content="{TemplateBinding ConnectionState}"
                              Visibility="Collapsed" />
          </Grid>
        </Grid>
        <ControlTemplate.Triggers>
          <DataTrigger Binding="{Binding (xcdg:DataGridControl.DataGridContext).IsConnectionStateGlyphEnabled, RelativeSource={RelativeSource Self}}"
                       Value="False">
            <Setter Property="Visibility"
                    TargetName="connectionStateGrid"
                    Value="Collapsed" />
          </DataTrigger>
          <DataTrigger Binding="{Binding (xcdg:DataGridControl.DataGridContext).DataGridControl.ConnectionState, RelativeSource={RelativeSource Self}}"
                       Value="Loading">
            <Setter Property="Visibility"
                    TargetName="connectionStateLoadingContentPresenter"
                    Value="Visible" />
            <Setter Property="Visibility"
                    TargetName="connectionStateErrorContentPresenter"
                    Value="Collapsed" />
            <Setter Property="Visibility"
                    TargetName="connectionStateCommittingContentPresenter"
                    Value="Collapsed" />
          </DataTrigger>
          <DataTrigger Binding="{Binding (xcdg:DataGridControl.DataGridContext).DataGridControl.ConnectionState, RelativeSource={RelativeSource Self}}"
                       Value="Committing">
            <Setter Property="Visibility"
                    TargetName="connectionStateLoadingContentPresenter"
                    Value="Collapsed" />
            <Setter Property="Visibility"
                    TargetName="connectionStateErrorContentPresenter"
                    Value="Collapsed" />
            <Setter Property="Visibility"
                    TargetName="connectionStateCommittingContentPresenter"
                    Value="Visible" />
          </DataTrigger>
          <DataTrigger Binding="{Binding (xcdg:DataGridControl.DataGridContext).DataGridControl.ConnectionState, RelativeSource={RelativeSource Self}}"
                       Value="Error">
            <Setter Property="Visibility"
                    TargetName="connectionStateLoadingContentPresenter"
                    Value="Collapsed" />
            <Setter Property="Visibility"
                    TargetName="connectionStateErrorContentPresenter"
                    Value="Visible" />
            <Setter Property="Visibility"
                    TargetName="connectionStateCommittingContentPresenter"
                    Value="Collapsed" />
          </DataTrigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

But now whole ControlTemplate is underlined and it says

Prefix 'xcdg' does not map to a namespace.

there is

xmlns:xcdg="http://schemas.xceed.com/wpf/xaml/datagrid"

both in my resource dictionary and window. Also xaml designer throws exception in 'MainWindow.xaml' where 'DataGridControl' is placed. It's

ArgumentException: '{DependencyProperty.UnsetValue}' is not a valid value for the 'System.Windows.Controls.Control.Template' property on a Setter.

At runtime it works fine. All happened after I added ControlTemplate to Style of DataGridControl. Any explanation why is this happening or how to avoid this will be highly appreciated.

like image 508
Kapitán Mlíko Avatar asked Jun 13 '13 12:06

Kapitán Mlíko


1 Answers

Seems like this issue still exists in VS2017. the exception is raised when using binding to dependency properties with namespace.

the solution I found is to explicitly add Path= to the binding.

Original code:

<DataTrigger Binding="{Binding (xcdg:DataGridControl.DataGridContext).IsConnectionStateGlyphEnabled, RelativeSource={RelativeSource Self}}" Value="False">

Modified code:

<DataTrigger Binding="{Binding Path=(xcdg:DataGridControl.DataGridContext).IsConnectionStateGlyphEnabled, RelativeSource={RelativeSource Self}}" Value="False">

I've found the solution in Heinrich Ulbricht Blog

like image 177
itsho Avatar answered Oct 09 '22 06:10

itsho