[英]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.