【问题标题】:Prefix 'xcdg' does not map to a namespace前缀“xcdg”不映射到命名空间
【发布时间】:2013-06-13 12:08:22
【问题描述】:

我最近开始使用 Extended WPF Toolkit 中的 DataGridControl

<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>

没关系,一切正常。然后我添加了样式。

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

Style 已应用,一切都恢复正常。所以我接下来要做的是使用 Expression Blend 创建 CotrolTemplate 并将该模板添加到我的样式中。

<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>

但现在整个 ControlTemplate 加了下划线并显示

前缀“xcdg”不映射到命名空间。

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

在我的资源字典和窗口中。此外,xaml 设计器在放置“DataGridControl”的“MainWindow.xaml”中引发异常。这是

ArgumentException:“{DependencyProperty.UnsetValue}”不是 Setter 上“System.Windows.Controls.Control.Template”属性的有效值。

在运行时它工作正常。这一切都发生在我将ControlTemplate 添加到DataGridControlStyle 之后。任何解释为什么会发生这种情况或如何避免这种情况将不胜感激。

【问题讨论】:

    标签: wpf xaml controltemplate xceed-datagrid


    【解决方案1】:

    似乎这个问题在 VS2017 中仍然存在。使用命名空间绑定到依赖属性时会引发异常。

    我找到的解决方案是将 Path= 显式添加到绑定中。

    原码:

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

    修改后的代码:

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

    我在Heinrich Ulbricht Blog找到了解决方案

    【讨论】:

      【解决方案2】:

      这只是 VS2012 Xaml Designer 的问题,它是 reported 并已通过 VS Update 3 修复。

      【讨论】:

      • VS2015 Update 3 并没有为我解决这个问题。仍然需要@itsho 提供的解决方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      相关资源
      最近更新 更多