最近开发一个自定义Silverlight Control时, 遇到一件莫名其妙的事情:

我这里的自定义控件继承自ContentControl, 其样式定义如下:

 

View Code  <Style TargetType="dc:XXXX">
       <Setter Property="Cursor" Value="Hand" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="dc:XXXX">
                    <Grid Name="MainGrid" Margin="{TemplateBinding Padding}">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>
                       ...

                        <ContentPresenter Name="ImagePresenter" Margin="4,0" MinWidth="16" VerticalAlignment="Center" HorizontalAlignment="Center" 
                                          Content
="{TemplateBinding Image}" />

                        <ContentPresenter Name="HeaderPresenter" Margin="2,0,0,0" Grid.Column="1" VerticalAlignment="Center"
                                          Content
="{TemplateBinding Header}" ContentTemplate="{TemplateBinding HeaderTemplate}" />
                        <VisualStateManager.VisualStateGroups>
...           </VisualStateManager.VisualStateGroups>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

 使用这个控件,我对其ContentTemplate指定一个DataTemplate, 而运行后,ImagePresenter并没有显示一个有效的Image (尽管我可以保证DataBinding是没有问题的)。

但是ImagePresenter却莫名其妙的 显示了前面提到的DataTempalte的东西。

 

经过推敲,大概是ImagePresenter这个ContentPresenter的ContentTemplate默认集成了父控件的ContentTemplate的值。

那如何阻止它这样的默认的集成能力呢?

因为我发现 HeaderPresenter并没有像ImagePresenter元素那样, 而是显示了正常的值。不同的就在于HeaderPresenter指定了 ContentTemplate,似乎因为有指定,所以没有被默认为父控件的ContentTemplate的值。

所以,给ImagePresenter加上ContentTemplate的绑定语法, 但是它这里只是显示一个image 并不需要复杂的Template, 原则上只需要制定Content即可。那么有没有语法可以指定ImagePresenter的ContentTemplate为 “Null” 呢。

 

x:Null 这个xaml的标记扩展,就是完成这件事情。

 null 指定为通过 XAML 属性 (Attribute) 设置的属性 (Property) 的值。

<object property="{x:Null}" .../>

备注


 

相关文章:

  • 2021-06-11
  • 2022-12-23
  • 2021-06-22
  • 2021-08-20
  • 2021-06-21
猜你喜欢
  • 2021-09-27
  • 2021-06-17
  • 2021-05-09
  • 2021-06-09
  • 2022-01-10
相关资源
相似解决方案