代码之家  ›  专栏  ›  技术社区  ›  rasx

为什么这个xaml无效?

  •  1
  • rasx  · 技术社区  · 15 年前

    此xaml编译和运行时没有任何运行时错误:

    <Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:Custom="http://schemas.microsoft.com/wpf/2008/toolkit" x:Class="WpfApplication1.Window1"
        Title="Window1" Height="300" Width="300" mc:Ignorable="d">
        <StackPanel Orientation="Vertical" d:LayoutOverrides="Height" DataContext="{Binding Source={StaticResource booksDataSource}}">
            <Custom:DataGrid ItemsSource="{Binding Mode=Default, XPath=/catalog/book}" AutoGenerateColumns="False">
                <Custom:DataGrid.Resources>
                    <ControlTemplate x:Key="TemplateLoverBirds">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="Great book!" />
                            <TextBlock x:Name="textBlock" Text="{Binding Mode=Default, XPath=title}" />
                        </StackPanel>
                </ControlTemplate>
                </Custom:DataGrid.Resources>
                <Custom:DataGrid.Columns>
                    <Custom:DataGridTextColumn Binding="{Binding Mode=Default, XPath=author}"/>
                    <Custom:DataGridTemplateColumn>
                        <Custom:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Control x:Name="TitleControl">
                                    <Control.Template>
                                        <ControlTemplate TargetType="{x:Type Control}">
                                            <TextBlock Text="{Binding Mode=Default, XPath=title}" />
                                        </ControlTemplate>
                                    </Control.Template>
                                </Control>
                                <DataTemplate.Triggers>
                                    <DataTrigger Binding="{Binding XPath=title}" Value="Lover Birds">
                                        <Setter TargetName="TitleControl" Property="Template" Value="{StaticResource TemplateLoverBirds}" />
                                    </DataTrigger>
                                </DataTemplate.Triggers>
                            </DataTemplate>
                        </Custom:DataGridTemplateColumn.CellTemplate>
                    </Custom:DataGridTemplateColumn>
                </Custom:DataGrid.Columns>
            </Custom:DataGrid>
        </StackPanel>
    </Window>
    

    但在Blend中的设计时,它被标记为无效的XAML,在Visual Studio设计时,将显示“已取消加载”屏幕(但在单击 继续加载设计器 )

    2 回复  |  直到 15 年前
        1
  •  1
  •   Community noseratio    7 年前

    blend只支持wpf的一个子集。我已经注意到事件设定者也会杀死Blend。我和你有同样的问题。我有许多窗口运行良好,但不能在混合查看奇怪的原因。

    Strategy to diagnose Expression Blend 2 failure to open Window

    我想可能是自定义的:datagrid可能不受支持。我不知道,只是猜测而已。如果你的窗口实例化并运行良好,那么我猜Blend被窃听了。

        2
  •  1
  •   pipelinecache    15 年前

    好吧,我解决了这个问题如下:

    变化:

    xmlns:Custom="http://schemas.microsoft.com/wpf/2008/toolkit
    

    到:

    xmlns:Custom="clr-namespace:Microsoft.Windows.Controls;assembly=WpfToolkit"
    

    确保你有一个好版本的wpftoolkit。对工具包进行引用,您就可以使用它了。