为什么不能操作ControlTemplate?

时间:2011-06-10 21:21:03

标签: c# wpf silverlight binding controltemplate

代码后

var roomTable = from desks in context.RoomToStandartDesks
            where desks.id_room == room.id
            select desks.Desk;

var tabItem = new TabItem
          {
          DataContext = roomTable,
          Header = headerText,
          };
if (controlTemplate == null)
    tabItem.Content = (object)roomTable;
else
    tabItem.Content = new ContentControl { Template = controlTemplate };
tabItems.Add(tabItem);

((ContentControl)(tabItem.Content)).Content == null

((ContentControl)(((ContentControl)(tabItem)).Content)).ContentTemplate == null

和xaml ControlTemplate:

<ControlTemplate x:Key="MyTabItemContentTemplate">
<StackPanel>
    <TextBlock Text="{Binding Path=x}"/>
    <ItemsControl ItemsSource="{Binding DataContext, Converter={StaticResource KeySimplyConvert}}">
        <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas Margin="10" Background="AliceBlue"  HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
        </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border>
            <Border.RenderTransform>
                <TranslateTransform X="{Binding x, Mode=TwoWay}" Y="{Binding y, Mode=TwoWay}"/>
            </Border.RenderTransform>
            <Managerer:TablePanel DataContext="{Binding}" />
            </Border>
        </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

</StackPanel>
</ControlTemplate>

为什么呢? 使用Silverlight 4。

1 个答案:

答案 0 :(得分:0)

我希望我理解你正在问......

  1. 为什么((ContentControl)(tabItem.Content)).Contentnull
  2. 为什么((ContentControl)(((ContentControl)(tabItem)).Content)).ContentTemplatenull
  3. ......在C#的第一位之后。我认为两者的答案都与你的代码中的这一行有关:

    else
        tabItem.Content = new ContentControl { Template = controlTemplate };
    

    我以后简化了这些parantheses,希望保持正确性。此外,将tabItem转换为ContentControl以获取相同的Content属性会让您更难阅读:

    1. ((ContentControl)tabItem.Content).Contentnull,因为您从未设置新Content的{​​{1}}属性。您只需设置ContentControl属性。
    2. Template ((ContentControl)tabItem.Content).ContentTemplate的原因基本相同:您没有设置null,而是设置了ContentTemplate