代码之家  ›  专栏  ›  技术社区  ›  David Mullin

需要重写字符串内容的默认ContentTemplate

  •  0
  • David Mullin  · 技术社区  · 14 年前

    如果菜单定义如下:

    <Menu>
    <MenuItem Header="Stuff" />
    </Menu>
    

    呈现时,MenuItem中的ContentPresenter将以如下内容结束:

    <TextBlock Text="{Binding}" />
    

    这意味着它继承了TextBlock的默认样式,这并不总是可取的。

    <MenuItem>
    <MenuItem.Header>
    <TextBlock Text="Stuff" Style="{DynamiResource MyStyle}" />
    </MenuItem.Header>
    </MenuItem>
    

    但这将是一个恼人的要求。

    我知道在WPF的神奇之处,有一个转换器或者其他什么东西正在获取String类型的内容,并创建一个使用TextBlock的DataTemplate,但是我找不到这个地方。我想一定有办法拦截魔法,但是因为我找不到魔法发生的地方,我就不知道怎么拦截它。

    1 回复  |  直到 14 年前
        1
  •  1
  •   MrDosu    14 年前

    你可以做一个 DataTemplateSelector

    public class MenuStringDataTemplateSelector : DataTemplateSelector
    {
        public override DataTemplate
            SelectTemplate(object item, DependencyObject container)
        {
            if(item is string)
               //TODO return your template
            return base.SelectTemplate(item, container);               
        }
    }