C#WPF基于DataTrigger更改ContentControl内容无效
我正在尝试基于DataTrigger更改内容控件的内容,DataTrigger检查绑定是否与类型匹配,以及是否更改了C#WPF基于DataTrigger更改ContentControl内容无效,c#,wpf,datatrigger,C#,Wpf,Datatrigger,我正在尝试基于DataTrigger更改内容控件的内容,DataTrigger检查绑定是否与类型匹配,以及是否更改了contentcontrols显示的内容,但运气不佳 简而言之,如果源是某个类型,我希望更改此ContentControl的内容。我尝试使用Styles/DataTriggers来实现这一点 <ContentControl> <ContentControl.Content> <TextBlock Name="CollectionC
contentcontrols
显示的内容,但运气不佳
简而言之,如果源是某个类型,我希望更改此ContentControl的内容。我尝试使用Styles/DataTriggers来实现这一点
<ContentControl>
<ContentControl.Content>
<TextBlock Name="CollectionControlTextBox1"
Tag="."
PreviewMouseDown="CollectionControlDefaultDockPanel_MouseButtonDown"
PreviewMouseUp="CollectionControlTextBox1_PreviewMouseUp"
MouseMove="CollectionControlDefaultDockPanel_MouseMove"
Drop="CollectionControlDefaultDockPanel_Drop"
Foreground="{Binding Meta.ColorBrush, Mode=OneWay, TargetNullValue={StaticResource TextBrush}, FallbackValue={StaticResource TextBrush}}"
AllowDrop="True"
MinHeight="20"
Padding="5 2 0 0"
KeyboardNavigation.IsTabStop="False"
Focusable="True"
TextTrimming="CharacterEllipsis"
ContextMenu="{Binding ParentControl.MemberContextMenu, Mode=OneWay}"
Text="{Binding DisplayName, Mode=OneWay}">
<TextBlock.CommandBindings>
<CommandBinding Command="{x:Static iugo:EditorCommands.Metadata}" Executed="Metadata" />
</TextBlock.CommandBindings>
</TextBlock>
</ContentControl.Content>
<ContentControl.Style>
<Style TargetType="ContentControl">
<Style.Triggers>
<DataTrigger Binding="{Binding Source, Converter={StaticResource IsAssociation}}" Value="True">
<Setter Property="Content">
<Setter.Value>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding IdEntry.Id}" ToolTip="{Binding IdEntry.Entry.Name}" FontSize="10" Foreground="{StaticResource DisabledTextBrush}" HorizontalAlignment="Center" Margin="0, 3, 0, 0"/>
<TextBlock Text="{Binding IdEntry.Entry.Name}" ToolTip="{Binding IdEntry.Entry.Name}" FontSize="13" Margin="5, 0, 0, 0"/>
</StackPanel>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
我已经测试了转换器:
IsAssociation
被正确命中,并且是正确的值,但是内容不会更改为DataTrigger
中定义的stackpanel
。我通过使用Visual Studio的视觉树确认了这一点,它仍然链接到旧内容。直接设置内容
类似
<ContentControl>
<Content>
...
</Content>
</ContentControl>
...
大于样式触发器中Setter设置的值。因此,您的DataTrigger将被忽略
将初始值移动到另一个Setter,而不是直接设置内容:
<ContentControl>
<ContentControl.Style>
<Style TargetType="ContentControl">
<Setter Property="Content">
<Setter.Value>
<TextBlock ...>
...
</TextBlock>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger ...>
<Setter Property="Content">
<Setter.Value>
<StackPanel Orientation="Horizontal">
...
</StackPanel>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
...
...
我想你不需要DataTrigger。您只需将转换器应用于文本属性。然后在转换器中,您可以检查值的类型,然后根据该类型更改文本属性。我建议您使用自定义控件。我想那将完全满足你的需要。