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

findResource()不使用数据模板

  •  0
  • anon  · 技术社区  · 14 年前

    <s:SurfaceWindow.Resources>
        <ImageBrush x:Key="WindowBackground" Stretch="None" Opacity="0.6" ImageSource="pack://application:,,,/Resources/WindowBackground.jpg"/>
    
            <DataTemplate x:Key="ContainerItemTemplate">
                <Grid>
                    <Border BorderThickness="1" BorderBrush="White" Margin="3">
                        <s:SurfaceTextBox IsReadOnly="True" Width="120" Text="{Binding Path=name}" Padding="3"/>
                    </Border>
                    <s:SurfaceButton Content="Expand" Click="SourceFilePressed"></s:SurfaceButton>
                </Grid>
            </DataTemplate>
    
        </s:SurfaceWindow.Resources>
    

    然后我用它将ItemTemplate添加到LibraryContainer:

    <Grid Name="RootGrid" Background="{StaticResource WindowBackground}" >
            <s:ScatterView Name="RootScatter">
                <Viewbox>
                    <s:LibraryContainer Name="RootContainer" Grid.Row="0" ViewingMode="Bar">
                        <s:LibraryContainer.BarView>
                            <s:BarView Rows="2" NormalizedTransitionSize="2.5,0.8" ItemTemplate="{StaticResource ContainerItemTemplate}">
                            </s:BarView>
                        </s:LibraryContainer.BarView>
                        <s:LibraryContainer.StackView>
                            <s:StackView NormalizedTransitionSize="1,1" ItemTemplate="{StaticResource ContainerItemTemplate}">
                            </s:StackView>
                        </s:LibraryContainer.StackView>
                    </s:LibraryContainer>
                </Viewbox>
            </s:ScatterView>
        </Grid>
    

    稍后,我将向ScatterView添加一个新的ScatterView项:

    ScatterViewItem item = new ScatterViewItem();
    
                    FrameworkElement element = surfaceWindow as FrameworkElement;
                    DataTemplate tmpl = element.FindResource("ContainerItemTemplate") as DataTemplate;
    
    
                    LibraryContainer container = new LibraryContainer();
                    container.ViewingMode = LibraryContainerViewingMode.Bar;
                    container.ItemsSource = itms;
                    container.BarView.ItemTemplate = tmpl;
    
                    item.Content = container;
                    surfaceWindow.getRootScatter().Items.Add(item);
    

    不幸的是,我总是在行中遇到一个空引用异常:

    container.BarView.ItemTemplate = tmpl;
    

    在此方法中传递对象surfaceWindow。它是对我定义DataTemplate的文件的引用。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Leigh S    14 年前

    除非LibraryContainer对象的构造函数生成LibraryContainer.BarView对象,否则此时该对象将为空。

    编辑 好吧,忽略之前的尝试…我现在已经对表面控件做了更多的阅读。

    DataTemplate tmpl = element.FindResource("ContainerItemTemplate") 
    

    如果您在那里设置了断点,模板是被返回的还是在此时为空?

    推荐文章