繁体   English   中英

自定义HeaderedContentControl,设置具有多重绑定的标题

[英]Custom HeaderedContentControl, set header with multibinding

我正在做一个自定义的HeaderedContentControl ,其基本样式如下:

<Style TargetType="{x:Type controls:DetailsControl}">
    <Style.Resources>
        <!-- Only if content is string provide a default Template -->
        <DataTemplate DataType="{x:Type system:String}">
            <TextBlock Text="{TemplateBinding Content}"
                       FontSize="{DynamicResource NormalFontSize}" />
        </DataTemplate>
    </Style.Resources>
    <Setter Property="HeaderTemplate">
        <Setter.Value>
            <DataTemplate DataType="{x:Type system:String}">
                <TextBlock Text="{TemplateBinding Content}"
                           FontWeight="Light"
                           FontSize="{DynamicResource SubHeaderFontSize}"/>
            </DataTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Template" Value="{StaticResource DetailsControlTemplate}" />
</Style>

<ControlTemplate x:Key="DetailsControlTemplate"
                 TargetType="{x:Type controls:DetailsControl}">
    <StackPanel>
        <ContentPresenter ContentSource="Header"
                          ContentTemplate="{TemplateBinding HeaderTemplate}"/>

        <ContentPresenter ContentSource="Content"
                          ContentTemplate="{TemplateBinding ContentTemplate}"/>
    </StackPanel>
</ControlTemplate>

当我只是将Header设置为字符串时,这可以正常工作

<controls:DetailsControl Header="Header Text" [...]>
    [...]
</controls:DetailsControl>

或正常绑定

<controls:DetailsControl Header="{Binding SelectedItem.Name, ElementName=ElementList}" [...]>
    [...]
</controls:DetailsControl>

但是,当我将Header设置为Multibinding时,它根本不会显示任何内容。

<controls:DetailsControl [...]>
    <controls:DetailsControl.Header>
        <MultiBinding StringFormat="{}{0} - {1}">
            <Binding ElementName="ElementList" Path="SelectedItem.Name"/>
            <Binding ElementName="ElementList" Path="SelectedItem.Description"/>
        </MultiBinding>
    </controls:DetailsControl.Header>

    [...]
</controls:DetailsControl>

我在哪里做错了? 解决此问题的正确方法是什么?

StringFormat要求target为string类型。 由于Header是一个内容字段,请尝试将其放入TextBlock

<controls:DetailsControl.Header>
   <TextBlock>
      <TextBlock.Text>
         <Multibinding .../>
      </TextBlock.Text>
   </TextBlock>
</controls:DetailsControl.Header>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM